在我的游戏中,我有激光从一个点向前射击。我使用此代码拉伸激光精灵并移动它以模拟更新函数中的运动:
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完全遵循。但是,当玩家没有接触激光时,有时会错误地触发didBeginContact。为什么会这样?
编辑:
激光物理学主体:
physicsBody = SKPhysicsBody(texture: texture!, size: size)
physicsBody!.affectedByGravity = false
physicsBody!.linearDamping = 0
physicsBody!.collisionBitMask = 0
physicsBody!.categoryBitMask = 1
球员物理身体:
physicsBody = SKPhysicsBody(circleOfRadius: 5)
physicsBody!.affectedByGravity = false
physicsBody!.linearDamping = 0
physicsBody!.collisionBitMask = 0
physicsBody!.contactTestBitMask = 1
所以他们进行了设置,以便在碰撞时调用didBeginContact,并且确实如此。我遇到的问题是,当玩家没有联系时,有时也会调用didBeginContact。我目前的假设是我的移动代码错误地放置了激光器。物理体对于不可见的瞬间或其他东西。
我在didBeginContact中设置了一个断点并截取屏幕截图。碰撞的物体是船和激光穿过角落。
答案 0 :(得分:1)
事实证明,如果你试图将精灵拉伸到它的原始大小的100倍,那么物理体就会变得略微不准确。糟糕。
我尝试在更新中重新应用一个新的物理主体,这似乎有效。