我正在开发一款多人游戏,其中每个玩家都由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改为bodyWithEdgeLoopFromRect。这会创建一个物理主体,其动态属性设置为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在多人模式中)
感谢您提供帮助。
答案 0 :(得分:0)
LearnCocos2D是对的,我在场景周围设置了一个笼子。
CGRect bodyRect = CGRectMake(-size.width, -size.height, size.width*3, size.height*3);
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:bodyRect];
那就行了!