【问题标题】:Move tile by tile with dynamic speed以动态速度逐块移动
【发布时间】:2013-05-10 11:08:51
【问题描述】:

我正在使用带有 slick2d 库的 java 并尝试以动态速度逐块移动。我尝试了几种方法,但它们都不能在图块之间以动态速度移动。有人可以帮助我并举一些例子吗?

编辑:

这两种方法我都试过了

在没有增量的情况下移动

        movementSpeed = 2;

    //decide direction
    if(targetX != x)
    {
        animation.update(delta);
        if(originalX < targetX)
            x += movementSpeed;
        else if(originalX > targetX)
            x -= movementSpeed;
    }
    if(targetY != y)
    {
        animation.update(delta);
        if(originalY < targetY)
            y += movementSpeed;
        else if(originalY > targetY)
            y -= movementSpeed;
    }

勒普

    public static float lerp(float start, float stop, float t)
    {
        if (t < 0)
            return start;

        return start + t * (stop - start);
    }
    public void move(long delta)
    {
            if (procentMoved == 0)
        {
            if (getSpeed(targetX, targetY) != 0)
            {
                movementSpeed = getSpeed(targetX, targetY);
            } else
            {
                targetX = originalX;
                targetY = originalY;
            }

        }
        if (procentMoved < 1)
        {
            animation.update(delta);

            //              movementSpeed = getSpeed(targetX, targetY);

            procentMoved += movementSpeed;

        } else if (procentMoved > 1)
        {
            animation.update(delta);
            //TODO fix bouncing bug
            procentMoved = 1;
        }

                    + movementSpeed);

        x = lerp(originalX, targetX, procentMoved);
        y = lerp(originalY, targetY, procentMoved);

        if (x == targetX)
            ;
        originalY = x;
        if (y == targetY)
            ;
        originalY = y;
}

【问题讨论】:

  • 你试过什么?你面临什么问题?提供一些显示您的问题的代码...
  • 我尝试过使用 lerp,问题是如果速度不正确,则字符移动到 long 需要更正。我也尝试过不使用 delta 移动,但如果移动速度不是 32(Tile 大小)的倍数,它就会失去方向。

标签: java lwjgl slick2d tile slick


【解决方案1】:

看来这可能是您的问题。您的 if 语句刚刚结束,并没有真正发挥作用。另外,你的变量也混在一起了。

if (x == targetX)
        ; // This will skip the If statement
    originalY = x;
    if (y == targetY)
        ; // This will skip the If statement
    originalY = y;

}

其实你说的是

orginalY = x; // Y = X?
orginalY = y; // Y = Y

请不要把这件事放在心上。我仍然遇到这个问题,但是我必须进行一些更正和自动放置才能使其正常工作。

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多