我有一个 SpriteNode
,它仅在 y 轴上受重力影响,并且可以通过 x 轴上的加速度计移动。我的场景上还有一个边框 (SKPhysicsBody
),它将我的节点保持在场景中。现在的问题是我的节点在执行由加速度计引起的 SKAction
时忽略了边界。
我的 x 运动/加速度计及其 Action 代码:
birdNode
是我的 SpriteNode
float destX = 0.0;
float currentX = birdNode.position.x;
BOOL shouldMove = NO;
if (data.acceleration.x < -0.1) {
destX = currentX + (data.acceleration.x * playerXSpeed);
shouldMove = YES;
}
else if (data.acceleration.x > 0.1) {
destX = currentX + (data.acceleration.x * playerXSpeed);
shouldMove = YES;
}
if (shouldMove) {
if (birdNode.position.x + destX < self.frame.size.width || birdNode.position.x - destX > 0) {
SKAction *moveBird = [SKAction moveToX:destX duration:0.1];
[birdNode runAction:moveBird];
}
}
最佳答案
我假设您已正确设置碰撞位掩码来处理碰撞。您应该通过测试来确认这一点以进行仔细检查。
我认为您的问题出在对象的速度上。如果对象移动得太快,并且我在您发布的代码中没有看到任何速度限制,则您的对象可以在一个更新周期内移过屏幕边界。
例如,您当前对象的位置是(400,100)。给定足够的速度,对象的下一次更新:位置可能是 (600,100)。这意味着您的对象确实跳过了边界而没有引起碰撞。
解决方案是限制速度或在设置对象的新位置之前进行位置检查。例如,如果新的 x 位置 > 屏幕宽度,则将 x 位置设置为最大允许屏幕宽度 x。
关于ios - 在与 PhysicsBody 碰撞时停止 SKAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369274/