我正在开发一个Javascript中的小游戏框架,并且已经完成了大部分库和低级别的东西,所以我没有把注意力集中在游戏对象系统上。在我以前的Java游戏框架中,我使用了非常好的组合,并且我将整个对象框架暴露给JS的事实激励我开始研究这个项目。在Java中,组合工作得非常好,因为您不再需要处理类型转换,或者至少非常少,因此所有内容都可以通过相同的管道传递。
然而,在Javascript中,因为它使您能够动态地向对象添加数据和方法,我想知道是否最好跳过整个组合结构,但这里的主要问题是性能。在数组中存储对象列表并迭代它们(并直接调用它们的方法)非常快,并且具有简单事件传播/冒泡的额外好处,因为通过原型构建的对象需要通过巨型程序运行检查列表,看它是否包含各种方法/数据..我认为对于非实时应用程序,这工作正常,但不是当您需要每秒30次渲染数百个对象时。我打算为这两个设计编写一些测试,但你们有没有对此有任何意见?
注意:这是一个html5框架。
答案 0 :(得分:2)
这个问题太广泛了,无法回答。我会尝试将其缩小到两位:
但这里的主要问题是表现。
首先,在遇到问题后关注性能。
作为由via组成的对象 原型设计需要通过一个巨大的检查列表来查看 如果它包含各种方法/数据。
对于两个人来说,这不是真的。您可以非常轻松地为每个mixin添加一个标记方法 - 有效地将您的巨型列表折叠为一个且只有一个。
例如:
Renderable = {
isRenderable: true
// render magic
}
myGameObject.extend(Renderable);
<强>更新强>
您也可以考虑采用面向事件的方法。这将允许您触发Render
事件,并且订阅的每个游戏对象都将自行呈现。不,如果声明。像(伪)的东西:
RenderManager.subscribe = function(subscriber) {
this.subscribers.push(subscriber)
}
RenderManager.render = function() {
// loop over all subscribers and render with them
}
// when initializing, add game objects to the render system
RenderManager.subscribe(myGameObject);
// then from your main game loop
RenderManager.render();