2013-06-04 10 views
5

を期待ように回転俳優翻訳されていない私はlibgdxフォーラムでこれを尋ねたが、私はy'allのは、私を助けることができる願っていたような応答を取得できませんでした:Scene2d -

私はゲームの部分を表すアクターを持っています。私がしようとしているのは、プレーヤーがplaceTileコマンドを送信する前に、タイルをクリックしてドラッグして画面の周りを移動し、それを複数回回転できるようにすることです。私がDragAndDropについて理解していることから、私のユースケースを念頭に置いて設計されているようには見えないので、代わりに各ゲームピース(下のコード)にdragListenerリスナーを付け加えることにしました。ドラッグ開始前の最小距離を0に設定する方法はわかりませんが、それは私の主な質問ではありません(洞察はありますが)。

とにかく、 30度の回転では、ドラッグはほとんどの場合と同じように動作します。60度では、マウスの動きが非常に小さいので、非常に速く動いているアクタを送ることができます。別の30度で、タイルの俳優は1-2フレームで画面を出て、広いアークで動きます。アクタを時計回りに回転させると、その動きは時計回りになります。反時計回りに同じパターン。

俳優の翻訳がローテーションを考慮しているようです。私は私の質問は、将来の翻訳に影響を与える回転を使わずにActor/Groupを回転させることができるのでしょうか?あるいは、タッチ/マウス入力に基づいて、アクターを画面の周りにドラッグするより良い方法がありますか?私は基本的に何かを台無しだと想像が、私は何を把握することはできません:

// during initial stage creation 
tileActor.setOrigin(tileActor.getWidth()/2, tileActor.getHeight()/2); 
tileActor.addListener(new DragListener() { 
     public void dragStart(InputEvent event, float x, float y, 
       int pointer) { 
      chosenTileActor = event.getTarget(); 

     } 

     public void drag(InputEvent event, float x, float y, int pointer) {    
      Actor target = event.getTarget();    
      target.translate(x, y); 
     } 

    }); 

とマウスホイールをスクロール経由して回転を扱うリスナーのために:

​​ 私は以下のいくつかのコードが含まれて

ポインタはありますか?私はDragListenerを使って正しい方向に進んでいますか?

読んでいただきありがとうございます!

答えて

7

代わりの翻訳、ちょうどあなたのドラッグイベントのステージ座標に直接俳優の位置を設定します。

tileActor.addListener(new DragListener() { 
    private float offsetX, offsetY; 

    @Override 
    public void dragStart(InputEvent event, float x, float y, int pointer) { 
    Actor target = event.getTarget(); 
    this.offsetX = event.getStageX() - target.getX(); 
    this.offsetY = event.getStageY() - target.getY(); 
    } 

    @Override 
    public void drag(InputEvent event, float x, float y, int pointer) { 
    event.getTarget().setPosition(event.getStageX() - offsetX, event.getStageY() - offsetY); 
    } 
}); 

俳優はすぐにどこ私にジャンプしないように、私はdragStartでオフセットを計算しています私がドラッグを開始したときにクリックされた(私のマウスに相対的なドラッグを作る)。これをテストし、どの回転でも動作します。

+1

これは完璧に、ありがとう! –

+0

'setTapSquareSize'メソッドを見てください。必要に応じて、0Fに設定します。 – Alexmelyon