我有一个SpriteNode
仅受y轴的重力影响,可以用x轴上的加速度计移动。我的场景中还有一个边框(SKPhysicsBody
),可以将节点保存在场景中。现在的问题是我的节点在执行由加速度计引起的SKAction
时忽略边界。
我的x移动/加速度计代码及其动作:
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];
}
}
答案 0 :(得分:1)
我假设您已正确设置碰撞位掩码来处理碰撞。您应该通过测试来确认这一点,以便仔细检查。
我相信你的问题在于对象的速度。如果对象移动太快,并且我在发布的代码中没有看到任何速度限制,则您的对象可以在一个更新周期中移过屏幕边界。
例如,您当前对象的位置是(400,100)。给定足够的速度,您的对象的下一次更新:位置可能是(600,100)。这意味着您的对象实际上跳过边界而不会导致碰撞。
解决方案是在设置对象的新位置之前限制速度或进行位置检查。例如,如果新的x位置是>然后在屏幕宽度上将x位置设置为允许的最大屏幕宽度x。