swift - 仅针对 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)却没有?
解决方案
推荐阅读
- python - 无法编码或解码以在我的字符串上看到“ç”
- javascript - 如何在反应中停止递归 setTimeout 函数(clearTimeout 不起作用)?
- python-3.x - 使用 Boto3 删除 SQS 消息时如何防止连接超时
- scala - 使用 akka-http 模板的新 sbt 应用程序,如何确定解析器并添加 maven Central?
- microsoft-graph-api - 通过 Graph API 创建 OneNote 页面时设置页面顺序
- php - 避免使用 foreach 重复 3 次相同的功能
- rust - 将两个对象传递给线程
- python - 如何在尝试使用 pip 安装某些依赖项时修复错误
- node.js - 如何在数字海洋虚拟机中使用 localhost 发送 http 请求?
- json - 从 React 中的 json 文件数据中搜索过滤器