Реституция только для указанных c объектов в SpriteKit - PullRequest
0 голосов
/ 30 апреля 2020

Я сейчас играю в футбол (футбол) с использованием SpriteKit, но столкнулся с небольшой проблемой. Когда персонажи (игроки) прыгают, я не хочу, чтобы они подпрыгивали, когда они ударялись о землю после (это выглядит очень странно и не очень реалистично c).

Отлично! Просто установите нулевое восстановление!

Но не так быстро ... это означает, что мяч тоже не отскочит.

Вот важные части моего кода:

struct cType {
    static let p1:UInt32 = 0
    static let ball:UInt32 = 1
    static let ground:UInt32 = 2
}

Продолжая, в didMove(to view: SKView) я определяю некоторые свойства моих объектов:

ball.physicsBody?.categoryBitMask = cType.ball
ball.physicsBody?.collisionBitMask = cType.p1 | cType.p2 | cType.ground
ball.physicsBody?.contactTestBitMask = cType.p1 | cType.p2 | cType.ground

p1.physicsBody?.categoryBitMask = cType.p1
p1.physicsBody?.collisionBitMask = cType.p2 | cType.ball | cType.ground
p1.physicsBody?.contactTestBitMask = cType.p2 | cType.ball | cType.ground

Что касается самого обнаружения столкновений, я просто использую didMove(_ contact: SKPhysicsContact), и он отлично работает .

Теперь, конечно, у меня есть игрок 2 (p2), но у этого спрайта тот же код, что и у игрока 1 (p1), за исключением того, что cType.p2 изменено на cType.p1 и наоборот наоборот.

У меня также есть некоторый код ground.physicsBody?.restitution = 0.5, но это, конечно, устанавливает восстановление на 0,5 для любого спрайта, который сталкивается с землей. Это где я действительно не уверен. Поэтому мой вопрос: как я могу убедиться, что мяч отскакивает, когда он падает на землю (с реституцией 0,5), а мои игроки (p1, p2) нет?

...