Sprite kit 让SKSpriteNode离开屏幕

Sprite kit 让SKSpriteNode离开屏幕,sprite-kit,Sprite Kit,我正在开发一个多人游戏,其中每个玩家都由一个SKSpriteNode类的对象表示 这是一款平台游戏,玩家可以向右奔跑直到到达世界的尽头 问题是,不幸的是,球员们被禁锢在屏幕的可见区域,不管我怎么努力,他们似乎都不喜欢离开屏幕。这就是我现在要解决的问题 这种多人模式的工作方式是,一个玩家可以在另一个玩家的后面或前面,这可以发生在屏幕的可见区域之外。所有玩家都会受到物理(特别是重力)的影响 创建玩家physicsBody的代码如下所示: player.physicsBody = [SKPhysics

我正在开发一个多人游戏,其中每个玩家都由一个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];
正如我所说的,有时对手玩家必须离开可视区域,但看起来好像它撞到了屏幕边缘

我写的一个解决方法是使用EdgeloopFromRect将对手的身体换成另一个身体。这将创建一个动力学属性设置为“否”的物理实体。这是一个丑陋的破解,由于重力停止影响它,所以效果不太好

    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;
    }
CGPoint leftCorner=[self.scene-convertPoint:CGPointZero-toNode:camera];

如果(_playerOponent.position.xLearnCos2D是正确的,我已经在我的场景周围搭建了一个笼子

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

这就可以了!

除非你自己设置这个“笼子”(即使用视图大小设置bodyWithEdgeLoop)没有任何东西会自动将物理实体保留在屏幕内。请检查您创建的任何边实体的代码,也许您只需要将地图的边界尺寸更改为世界的边界尺寸,而不是视图的边界尺寸?感谢您的回答,我只是有一个SKNode,它是我的世界,但我没有创建任何边实体。这怎么可能呢要更改地图边框的尺寸?myWorld=[SKNode node];[self addChild:myWorld];camera=[SKNode node];camera.name=@“camera”;[myWorld addChild:camera];这是我创建节点的方式,我在其中添加游戏的所有元素。摄影机用于跟踪用户当前正在玩的角色。实际上,当身体受到物理影响时,它们会被困在屏幕中,由bodyWithCircleOfRadius创建(dynamic property==是)。否则,它们不会。