首页 > 解决方案 > 仅针对 SpriteKit 中的特定对象恢复原状

问题描述

我目前正在使用 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)却没有?

标签: swiftsprite-kitgame-physicsskphysicsbodyrestitution

解决方案


推荐阅读