一旦设置了位置,就更改节点的位置。(SpriteKit)

时间:2016-07-11 05:33:46

标签: swift sprite-kit skphysicscontact

我正在研究一种游戏,它涉及在屏幕上移动的物体(鱼),你需要抓住另一个可以上下移动的物体(钩子)。一旦物体接触,鱼的位置应该与钩子的位置相同。所以在确实开始接触(这确实有效,我确定)我说,当钩和鱼的触摸使鱼的位置变得与钩子相同。

func didBeginContact(contact: SKPhysicsContact) {

        let firstBody = contact.bodyA
        let secondBody = contact.bodyB




     if firstBody.categoryBitMask == physicsCategory.fishHook && secondBody.categoryBitMask == physicsCategory.greenFish || firstBody.categoryBitMask == physicsCategory.greenFish && secondBody.categoryBitMask == physicsCategory.fishHook{

                CollisionWithfishHook(firstBody.node as! SKSprit

    eNode, greenFish: secondBody.node as! SKSpriteNode)

        }
    }

    func CollisionWithfishHook (fishHook: SKSpriteNode, greenFish: SKSpriteNode){

        greenFish.position = CGPointMake(fishHook.position.x, fishHook.position.y)

    }

由于某种原因,当我运行它并且他们联系时没有任何反应。我知道确实开始接触是正常工作的,因为当我告诉它当它接触钩子时移除鱼它是有效的。问题是我无法改变绿色鱼的位置。为什么这样做以及我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

didBeginContact方法中改变鱼的位置只会改变鱼的位置 - 鱼和钩接触的那一刻。您需要继续使用update方法更新鱼的位置。

我会在GameScene类中创建一个名为fishToUpdate的类变量,当你'挂钩'时,在fishToUpdate = greenFish (or whatever was caught)方法中设置didBeginContact。然后在update方法中,按fishToUpdate.position = fishHook.position更新鱼的位置。