我目前正在用Javascript开发一个小的游戏框架,并且已经完成了大部分的库和低级的东西,所以我不会把注意力集中在游戏对象系统上。在我之前的Java游戏框架中,我使用了组合,它工作得非常好,并且我将整个对象框架暴露给JS的事实激发了我参与这个项目。在Java中,组合工作得非常好,因为您不再需要处理类型转换,或者至少不需要处理很少的类型转换,所以一切都可以通过相同的管道传递。
然而,在Javascript中,由于它提供了向对象动态添加数据和方法的能力,我想知道跳过整个组合结构是不是最好,但这里的主要问题是性能。在数组中存储对象列表并迭代它们(并直接调用它们的方法)是非常快的,并且具有易于事件传播/冒泡的额外好处,其中通过原型组成的对象将需要运行一个巨大的检查列表,以查看它是否包含各种方法/数据。我认为对于非实时应用程序来说,这可以很好地工作,但当你需要每秒渲染数百次对象30+时就不行了。我将为这两种设计编写一些测试,但是你们中有谁对此有什么建议吗?
注意:这是一个html5框架。
发布于 2011-12-15 12:59:04
这个问题太宽泛了,无法很好地回答。我试着把它缩小到两个比特:
,但这里的主要问题是性能。
首先,在你遇到问题后,专注于性能。
作为一个通过原型构建的对象,需要经过大量的检查,以查看它是否包含各种方法/数据。
第二,这不是真的。你可以很容易地为你的每个混合添加一个标志方法--有效地将你的巨型列表折叠成一个并且只有一个。
例如:
Renderable = {
isRenderable: true
// render magic
}
myGameObject.extend(Renderable);更新
您可能还想考虑一种面向事件的方法。这将允许您触发Render事件,并且订阅的每个游戏对象都将简单地呈现自身。没有if语句。类似于(伪):
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();https://stackoverflow.com/questions/8471975
复制相似问题