我有一个图像,我尝试使用函数四处移动:
public void MoveXY(Vector2 target)
{
Vector2 startPosition = this.pos;
Vector2 endPosition = target;
float lerpAmount = 0.05f;
this.pos = Vector2.Lerp(startPosition, endPosition, lerpAmount);
}
我在游戏更新循环中调用它。
我想创建一些变量bool moving来跟踪obj是否在移动,但是我很难想象如何在游戏循环中实现它。
我需要这样的东西:
obj.MoveXY(target1);
如果命令一完成:
obj.MoveXY(target2);
做那件事的正确方法是什么?
3条答案
按热度按时间fv2wmkja1#
您所遇到的困难是游戏应用程序的典型问题。与常规应用程序不同,您不能简单地通过语句序列反映操作序列,因为在每次游戏循环更新时,只有很小一部分语句序列会被执行。
你必须记住游戏的当前状态和每一个动作的更新。这可能会变得相当复杂。这个问题的一个解决方案是使用Finite-state machine,如这里Game Programming Patterns / Design Patterns Revisited: State和这里Gamedevelopment Finite-State Machines: Theory and Implementation所解释的。
7lrncoxx2#
ldioqlga3#
您可以使用以下简单代码移动对象:
然后在另一个脚本中,您可以检查对象是否到达目标并设置新目标: