[英]Sprite Kit - Do not allow node to move out of screen
我正在创建一个游戏,我不希望玩家能够移出屏幕。 该节点跟随玩家移动触摸。 我有“正在建设中”的代码,因此玩家无法在顶部或右侧移出,但我不希望玩家能够在任何一侧移出。
- (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]]];
}
在您的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
祝好运!
您应该创建一个物理世界并在屏幕周围添加边框矩形。 此边框必须具有物理主体,该物理主体设置为与给予播放器节点的物理主体碰撞类别相冲突。 如果玩家节点在边界内启动,则玩家不能离开屏幕并且不需要额外编码(除了为每个物理主体正确设置碰撞类别)
RayWenderlich.com提供了易于理解的游戏教程,展示了如何根据精灵工具包手册处理碰撞。
只需将底部代码添加到您所调用的方法中,它应该阻止所有物理实体离开屏幕! 很有用!
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.