首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >player SKPhysicsBody通过其他SKPhysicsBody swift 4 Xcode 9传递

player SKPhysicsBody通过其他SKPhysicsBody swift 4 Xcode 9传递
EN

Stack Overflow用户
提问于 2017-10-04 05:08:44
回答 1查看 121关注 0票数 0

我正在按照swift 3游戏开发一书中的说明创建一个简单的点击拍打游戏。我有两个SKSpriteNodes,一个是player,另一个是一个静态对象,如果它接触,可能会伤害player。

对播放器的损坏将通过categoryBitMask的自定义接触逻辑实现。问题是,当我设置静态对象的categoryBitMask时,当播放器与静态对象接触时,自定义逻辑被触发,但是播放器现在通过静态对象移动。

下面是播放器和静态对象的init()函数

静态对象

代码语言:javascript
复制
    init() {
    super.init(texture: nil, color: .clear, size: initialSize)
    createAnimations()
    self.run(spinAnimation)
    let startTexture = textureAtlas.textureNamed("blade")
    self.physicsBody = SKPhysicsBody(texture: startTexture, size:   initialSize)
    self.physicsBody?.affectedByGravity = false
    self.physicsBody?.isDynamic = false
    self.physicsBody?.categoryBitMask = PhysicsCategory.enemy.rawValue
    self.physicsBody?.collisionBitMask = ~PhysicsCategory.heroDamage.rawValue
    self.zPosition = -9
  }

播放器

代码语言:javascript
复制
    init() {
    super.init(texture: nil, color: .clear, size: initialSize)
    let textureBody = textureAtlas.textureNamed("pierre-flying-3")
    self.physicsBody = SKPhysicsBody(texture: textureBody, size: self.size)
    self.physicsBody?.linearDamping = 0.9
    self.physicsBody?.mass = 30
    self.physicsBody?.allowsRotation = false
    self.zPosition = 1
    createAnimations()
    self.run(soarAnimation, withKey: "soarAnimation")
    self.physicsBody?.categoryBitMask = PhysicsCategory.hero.rawValue
    self.physicsBody?.contactTestBitMask = PhysicsCategory.ground.rawValue |
                                           PhysicsCategory.enemy.rawValue |
                                           PhysicsCategory.coin.rawValue |
                                           PhysicsCategory.powerUp.rawValue
    self.physicsBody?.collisionBitMask = PhysicsCategory.ground.rawValue
}

如果我删除了isDynamic = false条件,那么是的,它可以工作,但对象不再是静态的。我已经尝试增加对象的质量,并删除isDynamic = false。但是出于某种奇怪的原因,这与只包含IsDynamic = false语句具有相同的效果

有什么帮助吗?谢谢

编辑categoryBitMask值的枚举

代码语言:javascript
复制
enum PhysicsCategory:UInt32 {
case hero = 1
case heroDamage = 2
case ground = 4
case enemy = 8
case coin = 16
case powerUp = 32
}
EN

回答 1

Stack Overflow用户

发布于 2017-10-04 22:08:17

应该发生冲突的两个节点中的一个节点需要将设置为才能发生冲突。你不能让它们都是静态的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46553452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档