2017-07-20 14 views
0

今日アニメーション中にSpriteKit の位置に問題があります。アニメーション中のUIImageViewの位置

@IBAction func MoveTDButton(_ sender: UIButton) { 
     animationForPlane = UIViewPropertyAnimator(duration: 0.5, curve: .easeIn, animations: { 
      if sender.tag == 1 { 
       self.ship.center.x = sender.frame.origin.x + sender.frame.size.width - (self.ship.frame.size.width/2) 
       self.ship.image = #imageLiteral(resourceName: "shipright") 
       print(self.ship.center.x) 
      }else{ 
       self.ship.center.x = sender.frame.origin.x + (self.ship.frame.size.width/2) 
       self.ship.image = #imageLiteral(resourceName: "shipleft") 
       print(self.ship.center.x) 
      } 
     }) 
     animationForPlane.startAnimation() 
    } 

    private func autoshoot(_ imgShip :UIImageView, _ imgBullet :UIImageView){ 
     var t: TimeInterval! 
     t = 0.2 
     //var hauteur = self.view.frame.maxY 
     if let duration = t { 
      UIView.animate(withDuration: duration, animations: { 
       imgBullet.center.y = 10 
       imgBullet.center.x = self.ship.center.x 
      }, completion: { (true) in 
       imgBullet.center.x = self.ship.center.x 
       imgBullet.center.y = imgShip.center.y 
       //checkPosEnemy(img, hauteur: hauteur) 
       self.autoshoot(imgShip, imgBullet) 
      }) 
     } 

    } 

を機能MoveTDButtonスライドのアニメーションで(左と右)ボタンで自分の船を移動することがあります:私は試してみました

コード。 そして、撮影のためのオート撮影機能^^

問題:私の船を移動するために、私はボタンをクリックすると

、位置はアニメーションの最後に設定されていない時に。 私の弾は船の位置で撮影されるのではなく、アニメーションの最後に撮影されます。

+0

imgBullet.center.x = self.ship.layer.presentation()!.position 、あなたの代わりに、すべての船の位置を更新するべきではありませんプレイヤーが現在行っている敵の攻撃や地形との衝突など、他の活動を確認するためのアクションによって、そうすれば、そのポジションを使って弾丸を射撃することもできます。 –

+0

私はBen Ongに同意します。ゲームプログラミングのベストプラクティスは、フレームサイクルに従って、フレームごとにオブジェクトの位置を更新することです。 SpriteKitには、この目的のためにすでに実装されているゲームサイクルがあります。私はspriteKitに移行することをお勧めします。 –

答えて

0

SpriteKitまたは同様のフレームワークを使用する方がよいでしょう。

しかし、あなたが試すことができ、あなたの質問に答えるために:あなたは、いくつかの静的なアニメーションゲームをコーディングしていません考慮する代わりに imgBullet.center.x = self.ship.center.x

関連する問題