我正在尝试将一系列方形精灵放在用户在我的 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);
但我不知道从这里去哪里!我的最终目标是让方形精灵排列起来,并沿着线条的方向旋转,这样它们就可以形成一条平滑的线条。
我想象它的方式是针对所需的每个块,将块放置在线上的一个点,将其旋转到正确的方向,沿线向下移动 64px,然后重复直到放置所需数量的块。
总结:如何获得旋转度数,以及需要放置精灵的点?
编辑:这就是我已经走了多远。我的旋转很好,但我似乎无法让精灵正确排列。任何人都看到我可能会出错的地方吗?
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);
}