XNA中的高级RPG风格移动

4

我正在制作一款顶视角的RPG游戏,类似于口袋妖怪,但我在人物移动方面遇到了困难。基本上,我想实现的是一个平滑的基于瓷砖的移动系统,适用于我的玩家和地图上的其他人物。有没有人成功地做到了这一点?如果有,怎么做的呢?


你现在如何移动字符? - Felice Pollano
2个回答

8
如果您正在使用像宝可梦一样的网格系统,您可能可以通过设置角色在瓷砖之间移动的速度来实现这一点。
例如,如果您让他们每秒钟移动一个瓷砖,您就可以在您的“更新”函数中使用(float)gameTime.ElapsedGameTime.TotalSeconds来确定游戏更新的速度。从这里开始,您应该能够使角色每次更新时移动((float)gameTime.ElapsedGameTime.TotalSeconds * TileSize)。
这意味着如果他们每秒有4次更新(非常缓慢,但以此为例),他们将每次更新移动瓷砖距离的1/4,并在移动时间结束时到达终点(在本例中为1秒)。在这种情况下,如果您有32像素的瓷砖,他们将每次更新移动0.25 * 32,即8个像素。
希望对您有所帮助。

非常有趣...谢谢!我会尽快尝试一下! - Xedfire
我很高兴能为你提供一个起点,祝你好运! - Lyise

3
您想要的技术术语可能是“插值”。我认为您想做的最简单的事情是,在您想要给它平滑移动的时间段内,插入单位位置在其起始点(起始瓷砖的中心)和其结束点(结束瓷砖的中心)之间。公式大致如下:
float k = timeSinceStarted / durationOfMovement;
pos.X = startPos.X + (endPos.X - startPos.X) * k;
pos.Y = startPos.Y + (endPos.Y - startPos.Y) * k;

在游戏中,最好预先计算增量并添加增量,而不是存储起始位置。类似这样(注意:我还没有检查过这个计算)。
delta = endPos - startPos;

position += delta * (timeSinceLastUpdate / durationOfMovement);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接