gpt4 book ai didi

swift - SKSpriteNode 在 didBeginContact 之后不会定位

转载 作者:行者123 更新时间:2023-11-30 14:02:14 25 4
gpt4 key购买 nike

我正在使用 SpriteKit 和 Swift 进行碰撞检测。我有一个 SKScene 可以响应与 didBeginContact 函数的碰撞:

func didBeginContact(contact: SKPhysicsContact) {        
if (contact.bodyA.categoryBitMask == ColliderType.Food && contact.bodyB.categoryBitMask == ColliderType.Head) {
placeFoodInRandomGridLocation()
}
}
func placeFoodInRandomGridLocation() {
let randomX = arc4random_uniform(UInt32(myGrid.columnCount))
let randomY = arc4random_uniform(UInt32(myGrid.rowCount))
foodSpriteHolder.position = CGPoint(x: colLines[Int(randomX)], y: rowLines[Int(randomY)])
}

问题是我可以在 didBeginContact 函数触发之前轻松调整 foodSpriteHolder 的位置。当调用 placeFoodInRandomGridLocation 时,它根本不会移动 foodSpriteHolder。

这似乎是一个范围问题。我只是不确定如何找出该职位无法更新的原因。我什至可以使 foodSpriteHolder 可见性隐藏在此流程中......所以,我知道我可以访问它。

这里是如何为 foodSpriteHolder 中的 Food 类项目设置物理体的,供引用:

    self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size, center: CGPointMake(reducedSize/2, reducedSize/2))
self.physicsBody?.affectedByGravity = false
self.physicsBody?.categoryBitMask = ColliderType.Food

最后,placeFoodInRandomGridLocation 函数肯定会被调用...位置不会更新。

感谢您的任何想法,乔什

最佳答案

本例中的答案是在检测到冲突时删除节点:

contact.bodyA.node?.removeFromParent()

现在我可以在新位置创建一个新节点。由于affectByGravity设置为false,节点不会更新其位置。

关于swift - SKSpriteNode 在 didBeginContact 之后不会定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32857949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com