我目前正在使用 SpriteKit 制作足球(足球)游戏,但遇到了一个小问题。当角色(玩家)跳跃时,我不希望他们在落地后弹跳(这看起来很奇怪,也不太现实)。
美好的!只需将地面恢复为零!
但不是那么快......这意味着球也不会反弹。
以下是我的代码的重要部分:
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)却没有?