首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:复合设计与原型设计

Javascript:复合设计与原型设计
EN

Stack Overflow用户
提问于 2011-12-12 17:05:47
回答 1查看 342关注 0票数 2

我目前正在用Javascript开发一个小的游戏框架,并且已经完成了大部分的库和低级的东西,所以我不会把注意力集中在游戏对象系统上。在我之前的Java游戏框架中,我使用了组合,它工作得非常好,并且我将整个对象框架暴露给JS的事实激发了我参与这个项目。在Java中,组合工作得非常好,因为您不再需要处理类型转换,或者至少不需要处理很少的类型转换,所以一切都可以通过相同的管道传递。

然而,在Javascript中,由于它提供了向对象动态添加数据和方法的能力,我想知道跳过整个组合结构是不是最好,但这里的主要问题是性能。在数组中存储对象列表并迭代它们(并直接调用它们的方法)是非常快的,并且具有易于事件传播/冒泡的额外好处,其中通过原型组成的对象将需要运行一个巨大的检查列表,以查看它是否包含各种方法/数据。我认为对于非实时应用程序来说,这可以很好地工作,但当你需要每秒渲染数百次对象30+时就不行了。我将为这两种设计编写一些测试,但是你们中有谁对此有什么建议吗?

注意:这是一个html5框架。

EN

回答 1

Stack Overflow用户

发布于 2011-12-15 12:59:04

这个问题太宽泛了,无法很好地回答。我试着把它缩小到两个比特:

,但这里的主要问题是性能。

首先,在你遇到问题后,专注于性能。

作为一个通过原型构建的对象,需要经过大量的检查,以查看它是否包含各种方法/数据。

第二,这不是真的。你可以很容易地为你的每个混合添加一个标志方法--有效地将你的巨型列表折叠成一个并且只有一个。

例如:

代码语言:javascript
复制
Renderable = {
  isRenderable: true
  // render magic
}

myGameObject.extend(Renderable);

更新

您可能还想考虑一种面向事件的方法。这将允许您触发Render事件,并且订阅的每个游戏对象都将简单地呈现自身。没有if语句。类似于(伪):

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8471975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档