2016-06-29 3 views
0

背景をテクスチャとして作成した背景を持つゲームを開発しようとしています。そして、私はボックス内を移動している俳優を持っています。それは2048ゲームのようなものです。しかし、私はただ一つのキャラクターしか持ちません。私は簡単にアニメーションを動かすMoveToActionを使用して実装することができるので、キャラクタを移動させるように私は俳優を使用していScene2DでMoveToActionを使用してスプライトの背景にアクタを移動させる

enter image description here

。 (私が知る限り)

これは最適な実装方法であるかどうかはわかりません。より良い方法があれば教えてください。

これまで私が行ったことはあります。

ApplicationAdapterから拡張されたクラスがあります。

これは私のActorクラスです。

public class MyActor extends Actor { 
    Texture texture = new Texture(Gdx.files.internal("joffrey.png")); 
    public boolean started = false; 

    public MyActor() { 
     setBounds(imageWidth/2, imageHeight/2, texture.getWidth()/2, texture.getHeight()/2); 
    } 

    @Override 
    public void draw(Batch batch, float alpha) { 
     batch.draw(texture, this.getX(), getY()); 
    } 
} 

は、だから私は、ユーザーが右にスワイプしたときにダウン、アップ、左、MoveToActionを使用して別のボックスから、この(ジョフリー)を移動します。

ここで説明したようにSimpleDirectionGestureDetectorクラスを作成しました。 LibGDX - Get Swipe Up or swipe right etc.?

ここで私はどのようにクラスを使用したのですか。

Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() { 

     @Override 
     public void onUp() { 
      moveAction = new MoveToAction(); 
      moveAction.setPosition(myActor.getX(), myActor.getY() + imageHeight); 
      moveAction.setDuration(0.1f); 
      myActor.addAction(moveAction); 
     } 

     @Override 
     public void onRight() { 
      moveAction = new MoveToAction(); 
      moveAction.setPosition(myActor.getX() + imageWidth, myActor.getY()); 
      moveAction.setDuration(0.1f); 
      myActor.addAction(moveAction); 
     } 

     @Override 
     public void onLeft() { 
      moveAction = new MoveToAction(); 
      moveAction.setPosition(myActor.getX() - imageWidth, myActor.getY()); 
      moveAction.setDuration(0.1f); 
      myActor.addAction(moveAction); 
     } 

     @Override 
     public void onDown() { 
      moveAction = new MoveToAction(); 
      moveAction.setPosition(myActor.getX(), myActor.getY() - imageHeight); 
      moveAction.setDuration(0.1f); 
      myActor.addAction(moveAction); 
     } 
    })); 

すべてここまでうまく見えます。私がアプリを起動すると、最初は正常に動作していますが、動いているアクションが遅すぎるように見えると、突然アプリケーションがエラーメッセージやログカットに何もないまま閉じられます!

私はここで何が起こっているのか考えていますか?

さらに、これは移動するアクションを実装する正しい方法ですか?動きのあるアニメーションをテクスチャに適用するにはアクタを使用する必要がありますか?

ありがとうございました。

+0

SimpleDirectionGestureDetectorのコードを共有できますか?スワイプ中に何回も 'onUp'、' onRight'などを何度も発しているような音がします。それとも別のものかもしれない。新しいアクションをメンバ変数( 'moveAction')に割り当てるのはなぜですか?別の場所で使っていますか?そして、いいえ、あなたは俳優を使う必要はありません。必要に応じて独自のソリューションを展開できます。 – Tenfour04

答えて

0

アクションの動作を異なる方法で実装できます。たとえば、

  • あなたのSimpleDirectionGestureDetectorでは、各動作(上、下など)で "方向"を設定します。これは、メインクラス(MyActor)のプロパティで、ムーブメントがどこに向かうべきかを表す値を保持しています。
  • act()メソッドをオーバーライドし、方向を確認して動きを適用します。あまりにも多くのゴミを生成するので、私は毎回行動を作成しません。代わりに、デルタを追加して進行状況を計算するカウンタを使用できます。チェック:https://github.com/libgdx/libgdx/wiki/Interpolation
  • カウンターが最大時間(アクションのように0.1f)に達すると、方向は何も動きがないようなニュートラルに設定されます。

申し訳ありませんが、私の電話からこれを書いていますが、これは論理を理解するのに役立ちます。

関連する問題