ios - 在与 PhysicsBody 碰撞时停止 SKAction

标签 ios objective-c sprite-kit accelerometer physics

我有一个 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/

相关文章:

ios - 尝试解析JSON会使应用崩溃

ios - 如何在 AVCaptureVideoPreviewLayer 上显示覆盖

ios - 将参数传递给选择器操作

ios - NSURLComponents 获取百分比编码

ios - 如何在 UITableView 之上显示 UIView?

iphone - iOS6 CALayer 释放/卸载 ScrollView 中滚动不可见的 View

swift 1.2 : Method does not override any method from its superclass

sprite-kit - 呈现 UIView 时 Spritekit FPS 下降

ios - 如何将物理主体作为子级添加到 SKSpriteNode?

ios - AFNetworking - NSMutableDictionary 参数