2017-10-06 1 views
0

私は質問があります。衝突後のスウィフト設定はダイナミックになります

私のゲームでは、オブジェクト(ブロック)が空から落ちるようにして、地面や別のブロックにぶつかって凍っている/固定している/もう動かないようにします。

私はランダムにブロックを作成して空から落ちるような関数を作成しました。

func spawnItems() { 

    var item = SKSpriteNode() 

     item = SKSpriteNode(imageNamed: "block3"); 
     item.name = "block"; 
     item.size = CGSize(width: 90, height: 90) 
     item.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 89.8, height: 89.8)) 

    item.physicsBody?.isDynamic = true 
    item.physicsBody?.affectedByGravity = true 
    item.physicsBody?.allowsRotation = false 
    item.physicsBody?.restitution = 0 

    item.physicsBody?.categoryBitMask = ColliderType.BLOCK 
    item.physicsBody?.collisionBitMask = ColliderType.PLAYER | ColliderType.BLOCK | ColliderType.GROUND 

    item.physicsBody?.contactTestBitMask = ColliderType.PLAYER | ColliderType.BLOCK | ColliderType.GROUND 

    item.zPosition = 30; 
    item.anchorPoint = CGPoint(x: 0.5, y: 0.5); 
    item.position.x = CGFloat(getKoordinates()); 
    item.position.y = 800; 

self.scene?.addChild(item) 
} 


override func didMove(to view: SKView) { 

    Timer.scheduledTimer(timeInterval: TimeInterval(1), target: self, selector: #selector(GameplayScene.spawnItems), userInfo: nil, repeats: true); 



} 

は今、私はそれが所定の位置にとどまるように、ブロックが地面/ブロックに当たると、falseにisDynamicを設定します。

どうすればよいですか?あなたは、あなたのクラスを確認する必要があり

答えて

0

SKPhysicsContactDelegateで、あなたはselfにシーンのphysicsworld delegateプロパティセットを持っていると、あなたは彼らのcontactTestBitMask経由で正しく設定されている2つのスプライトと呼ばれるdidBegin(contact:)方法を、(実装する必要がありますおよびcategoryBitMask)が接触します。

+0

はい私はそれを試みました。問題は、オブジェクトが衝突したときにisdynamicをfalseに設定するたびに、将来作成される他のすべてのアイテムもisdynamicセットがfalseに設定されるということです。分かりますか? – Chief

+0

質問を編集して 'didBegin'関数のコードを投稿できますか? –

関連する問題