2

libgdx と scene2d を使用してカード ゲームに取り組んでいます。私のカード クラスは Image アクター クラスを拡張します。ドラッグしたときの x 位置に基づいてカードを描画する順序を設定する方法を見つけようとしています。

ここに画像の説明を入力

だから私は試しました:

@Override
public void drag(InputEvent event, float x, float y, int pointer) {
     float sx = event.getStageX();
     float sy = event.getStageY();
     if(sx - offsetX > 0 && sy - offsetY > 0){
       event.getTarget().setPosition(sx - offsetX, sy - offsetY);
       c.setZIndex((int) sx);
    }               
}

どうやら、zindex はステージ/グループ内の俳優の数にバインドされているため、これは機能しません。したがって、基本的にインデックスは 0 ~ 4 にする必要があります。私の次のアプローチは、画面幅を 5 で割り、それを zindex に設定することでした。カードが幅全体で均等に分離されていれば問題ありません。しかし、カードが途中で圧縮されていると、見栄えが悪くなります。2 ~ 3 枚のカードが真ん中に落ち、最後にドラッグされたカードが他のカードの上に描かれます。私はしたくない。

私の最後のアプローチは、すべてのカードを xposition で並べ替え、それらをループして z-index を与えることでした。そして、これは私が望むように機能しますが、遅いと思います(他のすべてのものをミックスに追加すると)

とにかく、アクターをループせずに x-position に相対的な z-index を設定できますか?

4

1 に答える 1

3

すべてのカードの初期位置の配列を用意します。ドラッグが発生するたびに、既存のドラッグ メソッドに基づいて配列を再シャッフルします。0 から長さ - 1 までの配列に格納されている位置を使用してカードを描画します。最初のカードの位置はインデックス 0 で、最後のカードの位置は配列の長さから 1 を引いた位置です。

または - Groupを使用します。グループを描画順に追加します。グループ内のアクターを入れ替えることができます。ドラッグ イベントに基づいてカードを交換します。

于 2013-07-29T08:02:58.763 に答える