Model view controller 时滞与模型视图控制器

Model view controller 时滞与模型视图控制器,model-view-controller,architectural-patterns,Model View Controller,Architectural Patterns,我正在实施一个基于回合的游戏,有两个边,每边都有几个单位,在每个特定的时刻只有一个单位可以在棋盘上移动 由于一次只能移动一个单位,在我计算出它应该移动到哪里后,就模拟而言,它可以立即被传送到那里,但玩游戏时,你会希望看到单位移动,以便你知道谁移动了,他去了哪里 问题是,您是否将移动算法(例如N秒内2点之间的插值)放入模型中,然后让视图在不知道装置正在移动的情况下显示装置处于插值位置,或者传送装置并通知视图,它应显示装置尽可能好地移动 如果采用第二种方法,您将如何防止模拟在视图之前运行过远,您是否

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

由于一次只能移动一个单位,在我计算出它应该移动到哪里后,就模拟而言,它可以立即被传送到那里,但玩游戏时,你会希望看到单位移动,以便你知道谁移动了,他去了哪里

问题是,您是否将移动算法(例如N秒内2点之间的插值)放入模型中,然后让视图在不知道装置正在移动的情况下显示装置处于插值位置,或者传送装置并通知视图,它应显示装置尽可能好地移动

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


提前感谢Xtapodi。

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

单位秒=总单位/(帧秒*总秒)


因此,如果我想在2秒内将图像从位置0移动到位置60,并且我的帧速率是30,我需要在60帧内移动60个单位,因此我的速度是1。因此,每一帧,我将图像移动1个单元,如果移动该单元会使我离开目标,只需将我的位置设置为我的目标。

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

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


与存储当前位置和上一个位置不同,您可以只存储每个单元的最后一个移动,并且移动本身包含上一个位置。如果您需要存储有关移动的额外信息,此功能可能更为通用。

感谢Rob Elliott的快速响应。问题不在于如何插入或确保它最终处于正确的位置。问题是插值是在模型中还是在视图中,以及在后一种情况下在模型和视图之间产生的时间同步问题。谢谢Kylotan。是的,我想我会同意你的第二个建议。所以我认为,如果你要自己实现模型和视图,你会选择将运动完全放在视图上,并保持模型的简单性?是的。游戏规则中的逻辑运动只是从一个地方到另一个地方,没有中间运动,所以这就是我存储在模型中的内容。这些地方之间的物理运动只是一个演示细节。如果对在模型中放置什么以及在视图中放置什么有疑问,请扪心自问,您将如何将其转变为一个邮件游戏或基于文本的游戏。谢谢Kylotan,它帮助我引导了我的思路:)