1

ゲームにスプライトがあり、その中心座標を取得したいと考えています。ただし、スプライトは回転できるため、x/y 座標を取得してスプライトの幅/高さの半分を追加することはできません。これは、getWidth メソッドと getHeight メソッドが元の回転していないスプライトの寸法を返すためです。

getSceneCenterCoordinates() を試しましたが、何らかの理由で、互いに近くになくても、すべてのスプライトに対して同じ座標が返されます。

ここに私が望むものを説明するグラフィックがあります。赤い点は私が望む座標であり、右側の図の幅/高さのラベルは、getWidth/Height メソッドが返したいものを表しています (しかし、そうではありません): ここに画像の説明を入力

4

4 に答える 4

2

座標変換器を使用できます

final float[] spriteCoordinates = sprite.convertLocalToSceneCoordinates(x,y);
        final float canonX = spriteCoordinates[VERTEX_INDEX_X];
        final float canonY = spriteCoordinates[VERTEX_INDEX_Y];
Sprite sprite_in_fixedpoint_of_the_first_sprite=new Sprite(canonX,canonY,textureregion)
于 2012-11-18T13:44:03.650 に答える
1

すべてのコーナーの最小値と最大値を取得します(--xコンポーネントとyコンポーネントの両方)。次に、最大値と最小値から平均を取り、中間値を取得します。

middleX = (maxX + minX) / 2

yコンポーネントについても同じことを繰り返します。

于 2012-06-07T00:05:16.310 に答える
1

このようなことを考えてください

    Rectangle test = new Rectangle(100, 100, 50, 100, vboManager);
    mainScene.attachChild(test);

    System.out.println("Before RotCtrX = " + test.getRotationCenterX());
    System.out.println("Before RotCtrY = " + test.getRotationCenterY());

    test.setRotation(45);
    System.out.println("After RotCtrX = " + test.getRotationCenterX());
    System.out.println("After RotCtrY = " + test.getRotationCenterY());

そして結果は

System.out(4526): Before RotCtrX = 25.0
System.out(4526): Before RotCtrY = 50.0
System.out(4526): After RotCtrX = 25.0
System.out(4526): After RotCtrY = 50.0

AndEngineエンティティは中心を中心に回転するため(RotationCenterの値を変更しない限り)、setRotate()を適用しても「中心」のポイントの位置には影響しません。

これらの「中心」ポイントはエンティティを基準にしているため、実際の画面座標が必要な場合は、それらをgetX()値とgetY()値に追加する必要があります。BTWもsetRotateの適用のみに基づいて変更されることはありません。 ()

于 2012-06-07T13:04:14.643 に答える
1

getSceneCenterCoordinates() を適切に使用する方法、つまり float[] を渡す方法を見つけました。これが私の解決策です:

float[] objCenterPos = new float[2];
obj.sprite.getSceneCenterCoordinates(objCenterPos);
Log.d(this.toString(),  "Coordinates: ("+objCenterPos[0]+","+objCenterPos[1]+")");
于 2012-06-07T21:38:00.110 に答える