让SKSpriteNode离开屏幕

时间:2014-03-07 18:53:35

标签: sprite-kit

我正在开发一款多人游戏,其中每个玩家都由SKSpriteNode类对象代表。

这是一个平台游戏,玩家向右跑,直到他们到达世界末日。

问题在于,不幸的是,玩家被关在屏幕的可见区域,无论我如何尝试,他们似乎都不喜欢离开它。这就是我现在要解决的问题。

这种多人模式的工作方式是玩家可以在另一个玩家的后面或前面,这可以发生在屏幕的可见区域之外。所有玩家都受到物理(特别是重力)的影响

创建播放器的physicsBody的代码如下:

player.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:player.size.width/2];
[player.physicsBody setDensity:100];
[player.physicsBody setCategoryBitMask:kPlayerCategory];
[player.physicsBody setContactTestBitMask:kWallCategory | kGroundCategory];
[player.physicsBody setCollisionBitMask:kWallCategory | kGroundCategory];
[player.physicsBody setAffectedByGravity:YES];

正如我所说,有时对手玩家必须离开可见区域,但看起来它是否会碰到屏幕边缘。

我写的一个解决方法是将对手的physicsBody改为bodyWithEdgeLoopF​​romRect。这会创建一个物理主体,其动态属性设置为NO。这是一个丑陋的黑客,它不能很好地工作,因为重力不会影响它。

    CGPoint leftCorner = [self.scene convertPoint:CGPointZero toNode:camera];
    if (_playerOponent.position.x <= leftCorner.x+30) {
        _playerOponent.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:_playerOponent.frame];
    } else if (_playerOponent.physicsBody != _playerOponentBody) {
        _playerOponent.physicsBody = _playerOponentBody;
    }

理想情况下,我需要的是能够将物理场景应用于大于屏幕尺寸的场景,以便存在对手进出屏幕的错觉(想象一下超级马里奥) 2d在多人模式中)

感谢您提供帮助。

1 个答案:

答案 0 :(得分:0)

LearnCocos2D是对的,我在场景周围设置了一个笼子。

    CGRect bodyRect = CGRectMake(-size.width, -size.height, size.width*3, size.height*3);
    self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:bodyRect];

那就行了!