Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 游戏的面向对象层次结构建模_Javascript_Oop - Fatal编程技术网

Javascript 游戏的面向对象层次结构建模

Javascript 游戏的面向对象层次结构建模,javascript,oop,Javascript,Oop,我想开始一个html5游戏开发项目 我以建模开始我的游戏项目。 我想出了这样的主意。 Game Array of Entities Timer score some methods for initializing master draw master update Entity Update Draw 发生的情况是主方法(更新或绘制)对每个实体调用更新/绘制方法 这个模型对我来说似乎足够清晰,我开始编写代码,但后来我意识到不同实体之间没

我想开始一个html5游戏开发项目
我以建模开始我的游戏项目。 我想出了这样的主意。

Game

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


Entity

   Update
   Draw
发生的情况是主方法(更新或绘制)对每个实体调用更新/绘制方法

这个模型对我来说似乎足够清晰,我开始编写代码,但后来我意识到不同实体之间没有通信的方式

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

我用相同的参数集对每个更新函数原型进行了编码,这样我就可以在实体上循环并轻松地调用它们

请有人提出克服这个问题的方法。 应对模型进行哪些更改?
另外,您如何更好地建模软件体系结构并扩展它。
您如何决定代码中有多少部分需要保持抽象?

好的。。。这是一个相当广泛的问题,你可能不会在这里得到一个明确的答案。但是genrally,你需要从模型视图的角度来思考你的游戏-[其他东西]。这里[其他东西]可以是或,或介于两者之间的东西

模型,如模型视图模式所述(与您在上文中所指的不同),了解并维护游戏逻辑,而不是它的任何视觉表示。游戏逻辑包括分数、关卡、玩家等。游戏中的每个视图(视图可以是分数框或玩家角色)都有一个对模型的引用,并从模型中提取渲染自身所需的信息。这就是您在视图之间共享信息的方式–通过一个集中的模型(在复杂的游戏中,有时模型有子模型,但一开始很简单,只有一个模型类)

当您发现您的视图需要一些非固有的基于模型的逻辑协调时,就需要引入控制器或viewModel逻辑

我相信,如果你在谷歌上搜索“游戏设计模式”(有或没有“javascript”),你会发现关于这个问题的各种有趣的教程

**编辑:**

在您的情况下,您可能应该将游戏视为您的控制器。在初始化时,它将实例化一个模型,这是您放置分数和计时器逻辑的地方(因此,不在游戏中。然后它将实例化实体数组,为每个实体提供模型的实例。在更新方法中,游戏将调用适当的方法更新模型,然后调用
更新()
在每个实体上,读取模型的状态并相应地重新绘制


有一种变体,游戏不会对实体调用
更新()
,相反,对模型的更改会触发每个实体订阅的事件

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

我过去所做的是让
游戏
将一组其他
实体
对象传递给每个
实体
的更新方法对我来说似乎不太正确,但我不确定,所以希望有人能对此发表评论…是的,我也想到了,但它似乎有问题。你能建议对我的模型进行一些更改吗?所以它很简单,只需将游戏存储在每个实体中,以便传输信息。但它不符合oop的整个概念。如果我们将游戏作为实体的实例。Does、 nt不符合“有一个”关系的整个概念。游戏不会是实体的实例。游戏实例化实体并为其提供模型。也就是说,在游戏中,您有
新实体(模型)
(我假设这里的实体是游戏某个方面的一些视图,比如角色或记分框)因此,从这个意义上说,游戏与实体/视图和模型有关系。但模型对实体一无所知。而且,实体知道模型,但通常对存在的其他实体一无所知。