3

我正在实施一个基于回合的游戏,有两侧,每一侧都有几个单位,在每个特定时刻只有一个单位可以在棋盘上移动。

由于一次只能移动一个单位,在我弄清楚它应该去哪里之后,就模拟而言,它可以立即传送到那里,但是玩游戏你会希望看到这个单位移动,这样你就知道是谁了移动了,他去了哪里。

问题是,您是否将运动算法(例如在 N 秒内在 2 个点之间插值)放入模型中,然后让视图显示单元处于插值位置,甚至不知道它正在移动,或者传送该单元并通知认为它应该显示该单元尽可能地移动。

如果您采用第二种方法,您将如何防止模拟在视图之前运行太远,您是否会在移动结束后让视图负责恢复模拟?

在此先感谢,Xtapodi。

4

2 回答 2

2

啊,又一个例子提醒我们,MVC 最初并不是为实时图形设计的。;)

我会将当前位置和先前位置存储在模型中。当对象移动时,当前位置被复制到前一个位置,新位置被复制到当前位置,并且模型已经改变的通知被发送到视图。然后视图可以相应地在旧位置和新位置之间进行插值。它可以完全基于特定的视图设置加速、减慢甚至删除插值,而不需要在模型中存储任何额外的数据。

您可以只存储每个单元的最后一次移动,而不是存储当前位置和前一个位置,而移动本身包含前一个位置。如果您需要存储有关移动的额外信息,这可能更加通用。

于 2010-07-11T16:28:50.380 回答
0

您可能想要的是让单位图像移动每一帧。每帧移动图像的距离类似于您的插值。

unitsPerSecond = totalUnits / (framesPerSecond * totalSeconds)

因此,如果我想在 2 秒内将图像从位置 0 移动到位置 60,并且我的帧率为 30,我需要在 60 帧中移动 60 个单位,因此我的速度为 1。所以每一帧,我将图像移动 1 个单位,如果移动设备会使我超出目的地,只需将我的位置设置为我的目的地。

于 2010-07-11T12:17:59.120 回答