В моей игре у меня есть лазеры, которые стреляют вперед от точки. Я использую этот код, чтобы протянуть лазерный спрайт и переместить его, чтобы имитировать движение в функции обновления:сделалBeginContact ложно срабатывает
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)
Все выглядит прекрасно - лазер стреляет из точки, а контур физики тела из поля зрения. showPhysics следует точно. Однако didBeginContact иногда ложно срабатывает, когда игрок не контактирует с лазером. Почему это происходит?
Edit:
Лазерная физика тела:
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 также вызывается иногда, когда игрок не находится в контакте. Мое нынешнее предположение заключается в том, что мой код движения не вмещает физическое тело лазера в течение невидимого момента или чего-то еще.
Я установил точку останова внутри сделалBeginContact и сделал скриншот. Объектами, которые столкнулись, являются корабль, а лазер проходит через угол.
Вам нужно указать пример, который мы можем проверить, не работает, ваш код ничего не показывает – Knight0fDragon
Обычно, если didBegin (контакт :) запускается, для этого есть веская причина. Поскольку KoD имеет saud, нам понадобится больше кода (определение физического тела, категория & contactTest bitMasks плюс ваш код didBegin (контакт :). Также точное описание того, какой узел якобы ошибочно контактирует с другими. –
'let height = size. height 'и' let difference = size.height - height 'делает «разницу» всегда 0. – Emptyless