假设您正在构建俄罗斯方块游戏。作为任何合适的程序员,您的观点逻辑都在一侧,而业务逻辑则在另一侧。可能正在进行完整的MVC。
当模型发送其update()
时, View 将按预期重绘自身。
但是然后...如果您想添加例如动画来消失一条线,您将如何在 View 中实现它?
做出您想要的任何假设-除了“所有内容均已正确封装”。
最佳答案
就个人而言,即使没有更新方块位置,我也会尽可能多地分开绘制屏幕。因此,我将在某个地方使用“更新” 和一个“渲染” 部分进行循环。更新是根据逻辑进行的,该逻辑不会或不会更新位置和/或移除块。渲染器将球踢到图形部分,该部分将块绘制在应有的位置。
现在,如果有要删除的行,逻辑将知道并可以标记要删除的行。我在这里假设,每块都包含4个单个块,并且这些块中的任何一个都是单个对象。现在,当该块设置了“die”标志时,您可以使用一些渲染部分来消失该块(假设爆炸需要500毫秒)。在此时间之后,可以放置物体,并且上方的一条线会掉落下来。为什么是500ms?好吧,您绝对应该使用基于时间的移动,因为这可以使不同计算机上的游戏速度保持一致。
顺便说一句,已经有所谓的游戏引擎提供这种更新-渲染-循环。例如XNA,如果您转到.NET行。您也可以编写自己的引擎,但要注意,这并非易事,而且非常耗时。我曾经做过一次,但并不期望它像Source Engine这样的引擎;-)
关于model-view-controller - 俄罗斯方块和漂亮的图形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/892244/