Sprite Kit - 不允许节点移出屏幕

3

我正在创建一个游戏,不希望玩家能够移出屏幕。该节点跟随玩家的触摸移动。我的代码已经"under construction",所以玩家无法向上或向右移动,但我不希望玩家能够从任何一侧移出。

- (void)movementPlayer {
    SKAction * actionMoveX =  [SKAction moveToX:MIN(location2.x - playerPositionX, self.size.width - (_player.size.width/2)) duration:0];

    SKAction * actionMoveY = [SKAction moveToY:MIN(location2.y - playerPositionY, self.size.height - (_player.size.height/2)) duration:0];

        [_player runAction:[SKAction sequence:@[actionMoveX, actionMoveY]]];

}
3个回答

3
在你的 SKScene 中:
self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsWorld.gravity=CGVectorMake=(0,0);
_player.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(10,10)];//example; use bodyWithPolygonFromPath:yourCGPath if player has more complex form, or bodyWithCircleOfRadius:radius if its shape is circle
_player.physicsBody.velocity=CGVectorMake(10,10); //or more then 10,10

祝你好运!


3
你应该创建一个物理世界,并在屏幕周围添加一个边框矩形。这个边框必须有一个物理主体,设置它与给定给玩家节点的物理主体碰撞类别相碰撞。如果玩家节点从边框内开始,则玩家无法离开屏幕,除了正确设置每个物理主体的碰撞类别外,不需要额外编码。
RayWenderlich.com有易于理解的游戏教程,展示如何遵循Sprite Kit手册处理碰撞。

0

只需将以下代码添加到调用方法中,它应该阻止所有物理体离开屏幕!! 非常有用!

     SKPhysicsBody* gameborderBody = [SKPhysicsBody        bodyWithEdgeLoopFromRect:self.frame];
      // 2 Set physicsBody of scene to borderBody
      self.physicsBody = gameborderBody;
      // 3 Set the friction of that physicsBody to 0
      self.physicsBody.friction = 1.0f;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接