在圆形路径上移动对象

时间:2017-08-16 11:04:36

标签: java libgdx

我的游戏基于瓷砖,它是一种棋盘游戏,船只可以向前,向左和向右移动。

当船舶想要向左或向右移动时,我们需要设置四个参数:

起点:这是我的船精灵当前所在的位置,这是它当前想要移动的地块的中心。

inbetween-point :当船舶向左或向右移动时,需要通过一个瓷砖转向该方向(您将在预览中看到该示例)

终点(目标位置):这是船舶想要移动的地方。

开始结束点之间的中心点:这是起点和终点之间的中心点,我们放置圆圈路径

这就是它的样子:

enter image description here

左下角的第一个红点是我们的起点。

黄点是中间点

右上角的最后一个红点是我们的目标位置。

我想要创造的是,让我的船在曲线运动中移动到目标位置。因此,我创建了一条圆形路径,我的船只精灵的中心点必须沿直线移动,直到它到达圆形路径上的第一个点,然后继续沿着路径移动直到它到达目标位置平铺,一旦它到达,它将沿直线移动,直到达到目标点。

现在的问题是,我该怎么做?

这是我到目前为止所做的:

    // Make sure that vessel has moves set to perform
    if (!vessel.getMoves().isEmpty()) {
        // Get the current move from the moves stack
        Move move = vessel.getMoves().peek();

        // Is the vessel currently performing move? if not, init a move!
        if (!vessel.isMoving()) {

            // the current rotation of the ship (either 0, 90, -90 or 180)
            float rotation = vessel.getSprite().getRotation();

            // the starting position
            Vector2 start = new Vector2(vessel.getSprite().getX(), vessel.getSprite().getY());

            // How much to add to X and Y to get the target positoon, based on current rotation of the ship (face)
            int moveX = move.getAddX(rotation) * TILE_SIZE;
            int moveY = move.getAddY(rotation) * TILE_SIZE;

            // get the end point (target pos)
            Vector2 end = new Vector2(vessel.getSprite().getX() + moveX, vessel.getSprite().getY() + moveY);

            // How much to add to x and y to get the inbetween position between start and end position
            int inbetweenX = move.getAddXInbetween(rotation) * TILE_SIZE;
            int inbetweenY = move.getAddYInbetween(rotation) * TILE_SIZE;

            Vector2 inbetween = new Vector2(start.x + inbetweenX, start.y + inbetweenY);


            vessel.setStart(start);
            vessel.setEnd(end);
            vessel.setInbetween(inbetween);

            vessel.setMoving(true);
        }
        else {
            // Starting position of the ship
            Vector2 start = vessel.getStart();
            // target position of the ship
            Vector2 end = vessel.getEnd();

            Vector2 inbetween = vessel.getInbetween();

            Vector2 middle = new Vector2((start.x + end.x) / 2, (start.y + end.y) / 2);

            renderer.rect(start.x + 32f, start.y + 32f, 1, 1);
            //renderer.rect(middle.x + 32f, middle.y + 32f, 1, 1);
            renderer.rect(end.x + 32f, end.y + 32f, 1, 1);

            renderer.setColor(Color.YELLOW);
            renderer.rect(inbetween.x + 32f, inbetween.y + 32f, 1, 1);

            renderer.circle(middle.x + 32f, middle.y + 32f, (float) (TILE_SIZE / 2)); // radius is half of tile size
            // todo render and update coords/rotation here ...

        }

0 个答案:

没有答案