javascript - JavaScript 游戏的模型- View - Controller 模式 (Three.js)。好主意?

标签 javascript model-view-controller three.js game-engine

我正在使用 Three.js 开发一款完全在前端运行的 3D 游戏(目前)。我完全分离模型(状态)和 View 是个好主意吗?

例如,我现在在需要时直接操纵(平移、旋转)我的移动对象,但我正在考虑持有和操纵它们在模型(游戏状态)中的位置的向量,然后设置每帧该向量处的对象。同样,我必须以某种方式存储对象的旋转,并将其设置在 View 中的每一帧。

具体例子: 当按下左箭头键时,我只是将玩家对象向左平移。相反,我会为每个帧将玩家对象设置为模型中的当前向量,并在左箭头上平移模型中的向量。

模型- View 模式似乎是一个很好的架构思想,但恐怕它会影响性能?

最佳答案

您错过了 Model View Controller (MVC) 模式中的 Controller 。 Controller 决定模型更改时 View 应如何更新。

在具体示例的第一部分中, View 代码监视左箭头击键。这是一个坏主意,因为您检查是否按下了向左箭头,每一帧都会减慢。

在具体示例的第二部分中, Controller 监视左箭头键击并相应地更新模型。这很好,因为 Controller 只在左箭头发生时运行一次代码。这也意味着 Controller 可以决定如何处理多次按键或按住某个键等情况。

View 代码在浏览器的帧更新(快速 = 每秒 60 帧)WebGL 部分中运行。左箭头键代码在浏览器的(慢速)事件队列部分中运行。就性能而言,您应该优化在框架更新中运行的代码。

关于javascript - JavaScript 游戏的模型- View - Controller 模式 (Three.js)。好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308768/

相关文章:

three.js - 如何将 THREE.JS 场景导出为光球的 360 度纹理

javascript - 在javascript中预加载datauri图像

javascript - 如何从脚本内获取 document.currentscript 并指向parentNode

javascript - 如何在页面提交时自动滚动到页面顶部

objective-c - UIViewController 和 UITableViewController 共享逻辑

javascript - Three.js 设置脸部颜色禁用阴影

javascript - 如何将表达式添加到 Handlebars 部分参数

javascript - 使图像在 div 中沿 x 轴随机生成 (CSS/Javascript/JQuery)

php - MVC : Does the Model or Controller validate user input

javascript - OrbitControls.js - 无法读取未定义的属性 'prototype'