2017-09-21 13 views
1

の方向にSKSpriteNodeの移動ここでは、ゲームのPrintScreenをを持っている:は、タッチ

enter image description here

私はタッチの方向に回転している静的SKSpriteNode(プレイヤー)を持っています。

class GameplayScene: SKScene, SKPhysicsContactDelegate { 

static let Pi = CGFloat(Double.pi) 
static let DegreesToRadians = Pi/180 

override func touchesMoved(_ touches: Set<UITouch>, with event: 
UIEvent?) { 
    let curTouch = touches.first! as UITouch 
    let curPoint = curTouch.location(in: self) 

    let deltaX = self.player.position.x - curPoint.x 
    let deltaY = self.player.position.y - curPoint.y 
    let angle = atan2(deltaY, deltaX) 

    self.player.zRotation = angle + 90 * GameplayScene.DegreesToRadians 
} 
} 

は今、私は、画面のタッチと同じ方向に動くプレイヤーから毎秒弾丸を撃つたい:これは私がそれを持っているコードです。弾丸が画面の外に移動すると、「SKAction.removeFromParent」を実装します。 、ミサイル射撃用として

run(SKAction.repeatForever(SKAction.sequence([SKAction.run { 
     yourFunction() 
     }, SKAction.wait(forDuration: 1)])), withKey: "key") 

順番にSKActionsを追加:あなたはこれを使用したいと思う、タイマーの

func fireMissile() { 
    let missile = SKSpriteNode(color: .yellow, size: CGSize(width: 20, 
    height: 5)) 
    missile.name = "Missile" 
    missile.position = CGPoint(x: player.position.x + 30, y: 
    player.position.y) 
    missile.zPosition = 2 
    missile.physicsBody = SKPhysicsBody(rectangleOf: missile.size) 
    missile.physicsBody?.isDynamic = false 
    missile.physicsBody?.categoryBitMask = ColliderType.Bullet 
    missile.physicsBody?.collisionBitMask = ColliderType.Enemy 
    missile.physicsBody?.contactTestBitMask = ColliderType.Enemy 

    self.addChild(missile) 

} 
+0

この回答はまだありませんでしたか? – Knight0fDragon

+0

が混乱している、またはここで2つの異なる質問をしていますか?弾丸を外したり、タンクを回転させたりするのを助ける必要がありますか?またはタンクを動かすのを助ける?これらはすべて別々の質問です:) – Fluidity

+0

Fluidify - 私は弾丸を一定の速度で画面上のタッチの方向に(プレーヤーから)基本的に撮影したいです。申し訳ありませんが、それを明確にbeeingしないでください:P – Flinigan

答えて

1

は、ここに私のfireMissile機能です。最初は弾丸をあなたのプレイヤーの前に置き、2番目の弾丸はミサイルを動かし、3番目は削除するが、これはシーケンスのために他の行の後にのみ実行される。後でアニメーションの途中で停止したい場合は、このシーケンスのキーがあることを確認してください。

missile.zRotation = player.zRotation 
missile.position = CGPoint(x:player.size.width/2*cos(player.zRotation)+player.position.x ,y:player.size.height*sin(player.zRotation)+player.position.y) 
missile.run(SKAction.sequence([SKAction.move(to: CGPoint(x:frame.size.width*cos(player.zRotation)+player.position.x ,y:frame.size.height*sin(player.zRotation)+player.position.y), duration: 0.5), SKAction.removeFromParent()]), withKey: "move") 
+0

最後に実行すると、わずかな構文エラーが発生する可能性がありますその – Bruce

+1

スプライトキットで 'Timer'を使いたくない場合は、ビヘイビアを使ってタイミングメソッドを組み込みたい – Knight0fDragon

+0

ありがとうございましたBruce - はい、最後の行に" Type '([SKAction] ) - > SKAction 'には添え字メンバーはありません。いいえ、解決していません:/ – Flinigan