Androidでユーザーが描いた線上に一連の正方形のスプライトを配置しようとしています。
指を下に向ける/指を上に向けるポイントのx/y座標は次のとおりです。
Vector2[] points = { new Vector2(mFingerStartX, mFingerStartY), new Vector2(mFingerEndX, mFingerEndY) };
との距離があります:
float distance = points[0].dst(points[1]);
回線に必要なブロック数(64x64px):
int blockNumber = (int) Math.floor(distance / 64);
でもここからどこへ行けばいいのかわからない!私の最終的な目標は、正方形のスプライトの線を並べ、それぞれを線の方向に回転させて、滑らかな線を形成することです。
私が想像しているのは、必要なブロックごとに、ブロックを線上の点に配置し、正しい方向に回転させ、線を64ピクセル下に移動し、必要な数のブロックが配置されるまで繰り返します。
要約:回転の程度と、スプライトを配置する必要のあるポイントを取得するにはどうすればよいですか?
編集:これは私がどこまで得たかです。回転はうまくいきましたが、スプライトを正しく並べることができないようです。誰かが私がどこで間違っているのかわかりますか?
float mFingerEndX = pSceneTouchEvent.getX();
float mFingerEndY = pSceneTouchEvent.getY();
Vector2[] points = { new Vector2(mFingerStartX, 800 - mFingerStartY), new Vector2(mFingerEndX, 800 - mFingerEndY) };
float distance = points[0].dst(points[1]);
int blockNumber = (int) Math.floor(distance / 64); //get the number of ice blocks needed to fill the area
double angle = Math.atan2(points[0].x - points[1].x, points[0].y - points[1].y);
double degrees = Math.toDegrees(angle);
Debug.d("Degrees: " + String.valueOf(degrees));
for (int i = 0; i < blockNumber; i++) {
double deltaX = Math.cos(degrees) * 32;
double deltaY = Math.sin(degrees) * 32;
float xLocation = (float) ((i * deltaX) + mFingerStartX);
float yLocation = (float) ((i * deltaY) + mFingerStartY);
final Sprite iceSprite = new Sprite(xLocation, yLocation, this.mIceBlockRegion, this.getVertexBufferObjectManager());
iceSprite.setRotation((float) (180 - Math.abs(degrees)));
mScene.attachChild(iceSprite);
}