我正在实现一个基于回合的游戏,有两个边,每边都有几个单位,在每个特定的时刻只有一个单位可以在棋盘上移动。
由于一次只能移动一个单位,在我弄清楚它应该移动到哪里之后,就模拟而言,它可以立即传送到那里,但在玩游戏时,你会希望看到单位移动,这样你就知道谁移动了,他去了哪里。
问题是,您是否会将移动算法(例如,在N秒内在2个点之间进行插值)放入模型中,然后让视图在甚至不知道单元正在移动的情况下显示插入位置的单元,还是传送单元并通知视图,它应该显示单元的最佳移动效果。
如果您将采用第二种方法,您将如何防止模拟在视图之前运行太远,您会让视图在移动结束后恢复模拟吗?
提前谢谢你,Xtapodi。
发布于 2010-07-12 00:28:50
啊,还有一个例子提醒我们,MVC最初并不是为实时图形而设计的。;)
我会将当前位置和前一个位置存储在模型中。当对象移动时,当前位置将复制到以前的位置,新位置将复制到当前位置,并向视图发送模型已更改的通知。然后视图可以相应地在旧位置和新位置之间进行插值。它可以根据特定的视图设置加快、减慢甚至完全删除插值,而不需要在模型中存储任何额外的数据。
而不是存储当前位置和以前的位置,相反,您可以只存储每个单元的最后一个移动,并且移动本身包含以前的位置。如果您需要存储有关移动的额外信息,这可能更加通用。
发布于 2010-07-11 20:17:59
您可能想要的是让单元图像移动每一帧。每一帧移动图像的距离类似于插值。
unitsPerSecond = totalUnits / (framesPerSecond * totalSeconds)
因此,如果我想在2秒内将图像从位置0移动到位置60,我的帧率是30,我需要在60帧中移动60个单位,因此我的速度是1。所以每一帧,我移动图像1个单位,如果移动单位会把我带到我的目的地之外,只需将我的位置设置为我的目的地。
https://stackoverflow.com/questions/3222929
复制相似问题