gpt4 book ai didi

swift - 联系代表节点未给出相同的位置

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

我有一个联系人代表来检查玩家何时遇到障碍。当该玩家碰到障碍物时,障碍物的位置将保存到要使用的变量中

var movement : Movement

var collision : Int = 0

init(_ movement : Movement){
self.movement = movement
}


// Body B is the collision giver
// Body A is the contacted node

func didBegin(_ contact: SKPhysicsContact) {

collision += 1

let categories : (taker: UInt32, giver : UInt32) = (contact.bodyB.categoryBitMask, contact.bodyA.categoryBitMask)

if categories.giver == Category.Player && categories.taker == Category.Barrier {
movement.setBack.isOn = true
movement.setBack.barrierPosition = (contact.bodyB.node?.position)!
}

print("Barrier position x")
print(contact.bodyB.node?.position.x)

print("Collision number")
print(collision)
}

但是,问题是我注意到 contact.bodyB.node?.position 给了我一个不同的值,即使障碍没有移动。由于每次的位置都不同,所以它抛弃了所有其他类。如何确保每次都能获得准确的值?

编辑

添加了一些调试消息:

    print("Barrier position x")
print(contact.bodyB.node?.position.x)

print("Collision number")
print(collision)

他们打印出:

Barrier position x
Optional(156.24853515625)
Collision number
1

然后我再次碰撞

Barrier position x
Optional(151.248504638672)
Collision number
2

最佳答案

尝试按如下方式重新排列代码:

func didBegin(_ contact: SKPhysicsContact) {
let collision = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch collision {
case Category.Player | Category.Barrier:
if case contact.bodyA.node?.categoryBitMask = Category.Barrier {
movement.setBack.isOn = true
movement.setBack.barrierPosition = (contact.bodyA.node?.position)!
} else {
movement.setBack.isOn = true
movement.setBack.barrierPosition = (contact.bodyB.node?.position)!
}
default:
return
}
}

关于swift - 联系代表节点未给出相同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42047609/

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