gpt4 book ai didi

java - 平稳地从 A 移动到 B

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:16 24 4
gpt4 key购买 nike

我有一个 android 游戏,我必须不时将相机(可见屏幕部分)从 A 点移动到 B 点。

显然我可以这样做:

camera.setCenter(B.getX(), B.getY();

但它看起来不太好,它只是立即跳转,我想要实现的是从 A 到 B 的平滑移动。我可以访问 onUpdate 方法,该方法循环更新某些游戏对象(所以我可以在某些情况下执行某些事情毫秒)

我真的不知道如何创建这样的算法,以允许两点之间的平滑移动(分类我不知道如何计算我应该添加什么值

camera.setCenter(camera.getX() + xValue, camera.getY() + yValue)

因为必须根据这两点之间的距离来计算这些值。

最佳答案

如果您的游戏以每秒 60 帧的速度更新,并且您希望过渡花费两秒钟,那么应该需要 120 帧才能到达那里。

因此,它在任何给定更新中应该移动的数量是total/120

您可以将其抽象为一个方法,该方法对移动进行排队,计算 FPS 和每次更新的移动量,然后在其当前位置加上更新量调用 .setCenter。这通常称为 interpolation .判断需要移动多远,无非就是current - destination的绝对值(哪个在前无所谓,所以我们直接取绝对值忽略标志。技术上,distance is a scalar whereas position is a vector)。

所以,用半代码总结一下(我不知道这些函数的实际契约):

//given these variables already have value
double fps, currentX, destinationX, currentY, destinationY, animationLength; //animation length in seconds
...
double xValue = Math.abs(currentX - destinationX);
double yValue = Math.abs(currentY - destinationY);
...
//on each update:
double amountToMoveX = xValue / (animationLength * fps);
double amountToMoveY = yValue / (animationLength * fps);
camera.setCenter(camera.getX() + amountToMoveX, camera.getY() + amountToMoveY)

然后您只需要跟踪何时停止,就可以开始了。

我不知道您使用的引擎是否已经具备执行此功能的能力。但就纯算法而言,这似乎是可行的方法。

关于java - 平稳地从 A 移动到 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com