作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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/
我是一名优秀的程序员,十分优秀!