我正在研究一种游戏,它涉及在屏幕上移动的物体(鱼),你需要抓住另一个可以上下移动的物体(钩子)。一旦物体接触,鱼的位置应该与钩子的位置相同。所以在确实开始接触(这确实有效,我确定)我说,当钩和鱼的触摸使鱼的位置变得与钩子相同。
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)
}
由于某种原因,当我运行它并且他们联系时没有任何反应。我知道确实开始接触是正常工作的,因为当我告诉它当它接触钩子时移除鱼它是有效的。问题是我无法改变绿色鱼的位置。为什么这样做以及我该怎么做才能解决它?
答案 0 :(得分:0)
在didBeginContact
方法中改变鱼的位置只会改变鱼的位置 - 鱼和钩接触的那一刻。您需要继续使用update
方法更新鱼的位置。
我会在GameScene
类中创建一个名为fishToUpdate
的类变量,当你'挂钩'时,在fishToUpdate = greenFish (or whatever was caught)
方法中设置didBeginContact
。然后在update
方法中,按fishToUpdate.position = fishHook.position
更新鱼的位置。