XNA中的高级RPG风格运动

XNA中的高级RPG风格运动,xna,Xna,我正在制作一个自上而下的rpg类型的游戏-类似于口袋妖怪,但我被角色移动所困扰。基本上,我想要为我的玩家和地图上的其他人实现一个平滑的基于平铺的移动系统。有人能有效地做到这一点吗?如果是,怎么做?如果您使用的是网格系统,就像神奇宝贝使用的一样,您可以通过设置网格在瓷砖之间移动的速度来实现这一点 例如,如果您让他们每秒移动一个磁贴,那么您可以在更新函数中使用(float)gameTime.ElapsedGameTime.TotalSeconds来确定游戏更新的速度。由此,您应该能够使角色在每次更新

我正在制作一个自上而下的rpg类型的游戏-类似于口袋妖怪,但我被角色移动所困扰。基本上,我想要为我的玩家和地图上的其他人实现一个平滑的基于平铺的移动系统。有人能有效地做到这一点吗?如果是,怎么做?

如果您使用的是网格系统,就像神奇宝贝使用的一样,您可以通过设置网格在瓷砖之间移动的速度来实现这一点

例如,如果您让他们每秒移动一个磁贴,那么您可以在
更新
函数中使用
(float)gameTime.ElapsedGameTime.TotalSeconds
来确定游戏更新的速度。由此,您应该能够使角色在每次更新时移动
((float)gameTime.ElapsedGameTime.TotalSeconds*TileSize)

这意味着,如果他们每秒有4次更新(非常慢,但举例来说),他们将在每次更新时在磁贴上移动1/4的距离,并在移动时间段结束时到达终点(本例中为1秒)。在这种情况下,如果您有32个像素的分幅,则它们将在每次更新时移动
0.25*32
,或移动8个像素


希望这能有所帮助。

你想要的“技术”一词可能是“插值”

我认为最简单的方法是,在希望平滑移动的时间段内,在起始点(起始平铺的中间)和结束点(结束平铺的中间)之间插入单位位置

公式是这样的:

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);