2017-10-03 3 views
0

私は、book swift 3ゲーム開発の指示に従って、フラップゲームに簡単なタップを作成します。 私は2つのSKSpriteNodesを持っています。1つはプレーヤーで、もう1つは静的オブジェクトで、接触した場合にプレイヤーを傷つける可能性があります。プレーヤーSKPhysicsBodyは他のSKPhysicsBodyスイフト4を通過します。Xcode 9

プレーヤーの損傷は、カテゴリBitMaskのカスタム連絡先ロジックを使用して実装されます。問題は、静的オブジェクトのcategoryBitMaskを設定してから、プレイヤーが静的オブジェクトと接触してカスタムロジックがトリガーされたときにプレイヤーが静的オブジェクトを移動するときです。ここで

は、プレイヤーと静的オブジェクトの両方

静的オブジェクトのためのinit()関数

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 
    } 

プレーヤー

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 =偽の条件を削除する場合ははい、それは作品ですオブジェクトはもはや静的ではありません。私はオブジェクトの質量を増やして、isDynamic = falseも取り除こうとしました。しかし、いくつかの奇妙な理由のために、これはIsDynamic = falseステートメントを含めるのと同じ効果があります

何か助けてください?おかげ

編集 categoryBitMaskの列挙は場所を取るために、衝突ためにダイナミックをするニーズを衝突しなければならない2つのノード

enum PhysicsCategory:UInt32 { 
case hero = 1 
case heroDamage = 2 
case ground = 4 
case enemy = 8 
case coin = 16 
case powerUp = 32 
} 

答えて

0

一つの値。それらを静的にすることはできません。

+0

ヒーローは、デフォルトでisDynamic = trueに設定されています。私はちょうどヒーローのinit()に行を追加しようとしましたが、結果は同じです。 – hoboBob

+0

PhysicsCategory-enumを回答に追加できますか?それは助けるかもしれない。 – Christoph

関連する問題