XNA中的高级RPG样式移动

时间:2011-04-05 20:58:50

标签: xna

我正在做一个自上而下的RPG游戏 - 类似于口袋妖怪,但我仍然坚持角色运动。基本上,我想要实现的是为我的播放器和地图上的其他人提供基于平滑图块的移动系统。有没有人设法有效地做到这一点?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:8)

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

例如,如果您创建它以便每秒移动一个磁贴,则可以在(float)gameTime.ElapsedGameTime.TotalSeconds函数中使用Update来确定游戏更新的速度。从此,您应该能够使角色每次更新((float)gameTime.ElapsedGameTime.TotalSeconds * TileSize)

这意味着如果他们每秒有4次更新(非常慢,但是例如),他们会在每次更新时移动瓷砖的距离的1/4,并在移动时间结束时到达终点期间(在这种情况下为1秒)。在这种情况下,如果您有32个像素图块,则每次更新时都会移动0.25 * 32或8像素。

希望这有帮助。

答案 1 :(得分: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);