didBeginContact 错误触发
didBeginContact falsely triggered
在我的游戏中,我有从一个点向前发射的激光。我使用此代码拉伸激光精灵并移动它以模拟更新函数中的运动:
let height = size.height
yScale += travelSpeed * CGFloat(time)
let difference = size.height - height
let xMove = sin(-zRotation) * difference * 0.5
let yMove = cos(-zRotation) * difference * 0.5
position = CGPoint(x: position.x + xMove, y: position.y + yMove)
一切看起来都很好 - 激光从一个点射出,view.showPhysics 中的物理 body 轮廓完全符合。但是,当玩家没有接触到激光时,有时会错误地触发 didBeginContact。为什么会这样?
编辑:
激光物理学Body:
physicsBody = SKPhysicsBody(texture: texture!, size: size)
physicsBody!.affectedByGravity = false
physicsBody!.linearDamping = 0
physicsBody!.collisionBitMask = 0
physicsBody!.categoryBitMask = 1
玩家物理Body:
physicsBody = SKPhysicsBody(circleOfRadius: 5)
physicsBody!.affectedByGravity = false
physicsBody!.linearDamping = 0
physicsBody!.collisionBitMask = 0
physicsBody!.contactTestBitMask = 1
所以它们被设置为当它们碰撞时调用 didBeginContact,它确实发生了。我遇到的问题是,当玩家没有接触时,有时也会调用 didBeginContact。我目前的假设是我的移动代码在 non-visible 瞬间或其他时间错位了激光的物理 body。
我在didBeginContact里面设置了一个断点,然后截图了。相撞的objects是飞船和对过拐角的激光
事实证明,如果您尝试将 sprite 拉伸到其原始大小的约 100 倍,物理体会变得 稍微 不准确。哎呀
我尝试在更新中重新应用一个新的物理体,这似乎有效。
在我的游戏中,我有从一个点向前发射的激光。我使用此代码拉伸激光精灵并移动它以模拟更新函数中的运动:
let height = size.height
yScale += travelSpeed * CGFloat(time)
let difference = size.height - height
let xMove = sin(-zRotation) * difference * 0.5
let yMove = cos(-zRotation) * difference * 0.5
position = CGPoint(x: position.x + xMove, y: position.y + yMove)
一切看起来都很好 - 激光从一个点射出,view.showPhysics 中的物理 body 轮廓完全符合。但是,当玩家没有接触到激光时,有时会错误地触发 didBeginContact。为什么会这样?
编辑:
激光物理学Body:
physicsBody = SKPhysicsBody(texture: texture!, size: size)
physicsBody!.affectedByGravity = false
physicsBody!.linearDamping = 0
physicsBody!.collisionBitMask = 0
physicsBody!.categoryBitMask = 1
玩家物理Body:
physicsBody = SKPhysicsBody(circleOfRadius: 5)
physicsBody!.affectedByGravity = false
physicsBody!.linearDamping = 0
physicsBody!.collisionBitMask = 0
physicsBody!.contactTestBitMask = 1
所以它们被设置为当它们碰撞时调用 didBeginContact,它确实发生了。我遇到的问题是,当玩家没有接触时,有时也会调用 didBeginContact。我目前的假设是我的移动代码在 non-visible 瞬间或其他时间错位了激光的物理 body。
我在didBeginContact里面设置了一个断点,然后截图了。相撞的objects是飞船和对过拐角的激光
事实证明,如果您尝试将 sprite 拉伸到其原始大小的约 100 倍,物理体会变得 稍微 不准确。哎呀
我尝试在更新中重新应用一个新的物理体,这似乎有效。