gpt4 book ai didi

android - 如何在跟随鼠标位置锁定在 Y 轴上的对象上实现平滑移动?

转载 作者:搜寻专家 更新时间:2023-11-01 08:52:31 25 4
gpt4 key购买 nike

我在 LibGDX 中制作一个 Android 游戏,其中玩家对象将相应地平滑移动到触摸 Y 位置,使其看起来像是在跟随触摸移动。到目前为止,这是我的代码,它按预期运行,但它不够平滑,有时它在到达触摸位置时会“摆动”(它没有到达零距离,但会绕过它。):

if ((player.getPosition().y * world.ppuY) < (world.height-touch.y-(world.ppuY/2f))) { //if player is below touch
if (Math.abs((player.getPosition().y * world.ppuY)-(world.height-touch.y-(world.ppuY/2f))) > 20) { // if distance is more than 20
player.getVelocity().y = Math.min(
Math.abs(
((player.getPosition().y * world.ppuY)-(world.height-touch.y-(world.ppuY/2f)))/2f),
Player.SPEED); // set velocity
} else { // if distance is less than 20
if (player.getVelocity().y != 0)
player.getVelocity().y *= 0.3f+delta; // slow down velocity
else
player.getVelocity().y = Math.min(
Math.abs(
((player.getPosition().y * world.ppuY)-(world.height-touch.y-(world.ppuY/2f)))/2f),
Player.SPEED); // just so it follows even when the touch moves slightly
}
}

if ((player.getPosition().y * world.ppuY) > (world.height-touch.y-(world.ppuY/2f))) {
if (Math.abs((player.getPosition().y * world.ppuY)-(world.height-touch.y-(world.ppuY/2f))) > 20) {
player.getVelocity().y = -Math.min(
Math.abs(
((player.getPosition().y * world.ppuY)-(world.height-touch.y-(world.ppuY/2f)))/2f),
Player.SPEED);
} else {
if (player.getVelocity().y > 1) {
player.getVelocity().y *= 0.3f+delta;
} else {
player.getVelocity().y = -Math.min(
Math.abs(
((player.getPosition().y * world.ppuY)-(world.height-touch.y-(world.ppuY/2f)))/2f),
Player.SPEED);
}
}
}

有没有比这更好的方法,一是让代码更短,二是让流畅的 Action 更好更稳定?

最佳答案

创建平滑运动的一个好方法是使用规范值将旧位置插入到新位置。根据值,相机或人物移动得更平滑或更不平滑。要实现这一点,您需要将 setY() 更改为如下内容:

currentpos.y = Interpolation.linear.apply(currentpos.y, gotopos.y, value[0,1]);
currentpos.x = Interpolation.linear.apply(currentpos.x, gotopos.x, value[0,1]);

根据值,它会将当前位置插入到转到位置。它对于 loadingbars 或 lifebars 等也很有用,因为它们不会“跳转”到新值。

尝试使用 value[0,1] 找到适合您的移动速度的值。

关于android - 如何在跟随鼠标位置锁定在 Y 轴上的对象上实现平滑移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801599/

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