动画SKScene的旋转无效

时间:2015-12-04 20:03:35

标签: ios objective-c rotation sprite-kit skspritenode

我的场景中有两个节点。一个是球,一个是背景。两者都作为孩子添加到场景中。

当球被撞到墙上时,我正试图旋转球。

 if (!firstNode.physicsBody.resting) {
        //first node gets the reference of ball node
        [firstNode runAction:[SKAction rotateToAngle:degToRad(5.0f) duration:1.0]];
    }

调试器抛出错误:

  

SKScene:动画SKScene的旋转无效。

我不想轮换SKScene。我正在尝试轮换SKSpriteNode,但为什么我会收到错误?

令人惊讶的是,我为其他节点做了同样的事情,并没有给出任何错误。

   SKAction *rotateAction = [SKAction rotateByAngle:degToRad(180.0f) duration:2.0];
    [_ringNode runAction:[SKAction repeatActionForever:rotateAction]];

那为什么我的第一种情况会发生错误?

我使用didBeginContact来检测节点之间的冲突:

并在此方法中:

 -(void)didBeginContact:(SKPhysicsContact *)contact
{

  SKSpriteNode * firstNode = (SKSpriteNode*)contact.bodyA.node;
  SKSpriteNode *  secondNode = (SKSpriteNode *)contact.bodyB.node;
} 

此处第一个节点返回为SKScene,但我尝试将其转换为SKSpriteNode。不知何故,墙被视为SKScene。所以我无法为第一个节点设置动画,因为它是SKScene

我可以设置secondNode SKSpriteNOde的动画。

2 个答案:

答案 0 :(得分:1)

当检测SpriteKit中的接触和碰撞时,无法保证哪个对象将成为bodyA,哪个将成为bodyB。您应该使用我假设您已分配给他们的类别来确定什么是什么。

if (contact.bodyA.categoryBitMask == myBallCategoryBitMask) {
    //Do Stuff to the ball
} else {
    //first node is the wall so do something to the secondNode

}

答案 1 :(得分:1)

当你说“墙”时,你可能做过这样的事情:

 self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.frame.size];

self.physicsBody.categoryBitMask = WallCategory

在这里,self是一个场景(可能是GameScene),它是SKScene的子类...
 来自physics body's node property的文档:

  

此主体连接的节点。 (只读)

在这种情况下,contact.bodyA.node将为您提供场景,因为代表墙的物理体连接到场景(请记住场景是一个节点)。