0

我正在尝试将一系列方形精灵放在用户在我的 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);
            }
4

1 回答 1

2

对于每个blockNumber,计算从用户绘制的线的该部分的一端到另一端的相对旋转。这是直角三角形的斜边,因为你也有该段的垂直和水平距离,你可以通过一些基本的三角函数来获得远离垂直的角度。将精灵旋转到那个角度,然后放置它(底部中间与底部点对齐)。对线上的每个精灵重复此操作,直到到达顶部。

但是,如果用户绘制的线条不是很平滑,精灵就不会是无缝的,但这是另一个问题。

于 2012-08-09T16:54:25.583 回答