1

我想开始一个html5游戏开发项目。
我从建模开始我的游戏项目。我想出了这样的事情。

Game

   Array of Entities
   Timer
   score
   some methods for initializing
   master draw
   master update


Entity

   Update
   Draw

发生的情况是主方法(更新或绘制)在每个实体上调用更新/绘制方法。

该模型对我来说似乎足够干净,我开始编写代码,但后来我意识到不同实体之间无法进行通信。

一个实体的更新方法需要考虑其他实体的状态。

我已经使用相同的参数集对每个更新函数原型进行了编码,以便我可以遍历实体并轻松调用它们。

请有人提出解决问题的方法。应该对模型进行哪些更改?
另外,您如何更好地建模软件架构并对其进行扩展。你如何决定要抽象多少部分代码?

4

2 回答 2

2

好的......这是一个相当广泛的问题,你可能不会在这里得到明确的答案。但一般来说,您需要根据模型-视图-[其他] 来考虑您的游戏。这里 [Something else] 可以是"Controller""ViewModel",或者介于两者之间的东西。

模型,正如 Model-View 模式所指的(不是你上面提到的),知道并维护游戏逻辑,而不是它的视觉表示。游戏逻辑包括分数、关卡、玩家等。游戏中的每个视图(视图可以是分数框或玩家角色)都有对模型的引用,并从模型中提取它需要渲染自己的信息。这就是你在视图之间共享信息的方式——通过一个集中的模型(有时模型有子模型,在复杂的游戏中,但从简单的开始,只有一个模型类)。

当你发现你的视图需要一些不是基于模型的逻辑协调时,那就是你引入控制器或 viewModel 逻辑的时候。

我敢肯定,如果你用谷歌搜索“游戏设计模式”(有或没有“javascript”),你会发现各种有趣的教程。

** 编辑: **

在您的情况下,您可能应该将Game视为您的控制器。在初始化时,它会实例化一个Model,这是你放置分数和计时器逻辑的地方(所以,不在Game里面。然后它会实例化Entities数组,给每个实体一个Model的实例。在更新方法中,Game会调用适当的方法来更新Model,然后调用update()每个Entity ,这将从Model中读取状态并相应地重绘。

有一个变体,其中Game不调用update()实体,而是更改每个Entity订阅的模型触发事件。

于 2012-12-07T22:42:53.843 回答
0

我以前也遇到过这个问题。我所做的是给一个实体一个对另一个玩家的引用(在只有两个实体的游戏中),和/或给实体一个对整个游戏模型的引用。通过为实体提供整个游戏模型,它可以看到其周围环境和周围的其他实体并采取相应的行动。

于 2014-02-19T15:55:47.957 回答