【问题标题】:Animating the rotation of a SKScene has no effect动画 SKScene 的旋转没有效果
【发布时间】:2015-12-04 20:03:34
【问题描述】:

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

当球撞到墙上时,我正在尝试旋转球。

 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

【问题讨论】:

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


    【解决方案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
    
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多