时间延迟和模型视图控制器

时间:2010-07-11 11:45:39

标签: model-view-controller architectural-patterns

我正在实施一个回合制游戏,有两个方面,每一方都有几个单位,在每个特定时刻只有一个单位可以全面移动。

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

问题是,你是否会在模型中放置移动算法(例如在N秒内插入两点之间),然后让视图在插值位置显示单位,甚至不知道它正在移动,或传送单位并通知视图它应该显示单位移动到最佳状态。

如果您采用第二种方法,您将如何防止模拟在视图前方运行太远,您是否会在运动结束后将视图置于恢复模拟的命令中?

提前致谢,Xtapodi。

2 个答案:

答案 0 :(得分:2)

啊,另一个例子提醒我们MVC从未最初设计用于实时图形。 ;)

我会将当前位置和先前位置存储在模型中。当对象移动时,将当前位置复制到先前位置,将新位置复制到当前位置,并向模型发送更改的视图发送通知。然后,视图可以相应地在旧位置和新位置之间进行插值。它可以根据特定的视图设置完全加速,减慢甚至消除插值,而无需在模型中存储任何额外的数据。

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

答案 1 :(得分:0)

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

unitsPerSecond = totalUnits /(framesPerSecond * totalSeconds)

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