2017-12-17 16 views
0

位置に停止することはありませんスウィフト4:SKSpriteNodeは、ユーザが画面をタップすると、タンク火災は、それは大丈夫です、私は弾丸とタンクを持っている。ここ

が、弾丸がタンクから出てきたときに、それを画面上に行くと、それはタッチ位置に

を停止することはありませんここに私のコードです:

for touch in touches { 
     let location = touch.location(in: self) 

     let bullet = SKSpriteNode(imageNamed: "bullet4") 

     bullet.position = CGPoint(x: self.MainTank.position.x, y: self.MainTank.position.y + 10) 

     bullet.size = CGSize(width: 12, height: 20) 

     bullet.physicsBody = SKPhysicsBody(circleOfRadius: bullet.size.width/2) 

     bullet.physicsBody?.affectedByGravity = false 
     bullet.physicsBody?.isDynamic = true // false stops the bullet on the tank 
     bullet.physicsBody?.allowsRotation = false 
     self.addChild(bullet) 

     var dx = CGFloat(location.x) 
     var dy = CGFloat(location.y) 

     let magnitude = sqrt(dx * dx + dy * dy) 

     dx /= magnitude 
     dy /= magnitude 

     let vector = CGVector(dx: 5.0 * dx, dy: 5.0 * dy) 

     bullet.physicsBody?.applyImpulse(vector) 


} 

私がtrueにisDynamicを設定しようとしましたが、これは、タンクの位置

で弾丸を停止させ

ありがとう

+0

なぜ弾丸を移動するために 'SKAction.moveTo(x:、y:)'を使用しないのですか? – junxi

答えて

0

ベクターに5.0を掛けるため、おそらく画面外に移動します。大きさの分割部分は必要ないので、私はそのようなベクトルを作成しません。

let dx = location.x - bullet.position.x 
let dy = location.y - bullet.position.y 
let vector = CGVector(dx: dx, dy: dy) 
bullet.run(SKAction.move(by: vector, duration: 1.0)) //choose your own duration of course 
+0

が機能しませんでした。弾丸が2番目に消えました。回答がありました。 –

+0

私の答えは更新されました。 – Eric

関連する問題