移相器.io如何在全局范围内使用独立于国家的资产
phaser.io How to use state independent assets globally
我想在切换到状态b
(其中phaserGameInstance
是Phaser.Game
的实例)后将状态a
预加载的图像/精灵添加到phaserGameInstance.world
中。
由于所有资源都是全局存储在浏览器缓存和phaserGameInstance.cache
中,它们应该在所有状态下可用,但实际上不是。
我找到的解决方法是用状态a
的缓存对象的属性扩展状态b
的缓存对象,这有点令人不安,可能不是预期的方式:
var priorCache = phaserGameInstance.state.getCurrentState().cache; // State 'a'
phaserGameInstance.state.start('b'); // Switch to state 'b'
jQuery.extend( // Merges the cache of state 'a' recursively
true, // into the cache of the current state 'b'
phaserGameInstance.state.getCurrentState().cache,
priorCache
);
我还没有测试这是否工作时,也预加载资产在状态b
(也许合并过程将覆盖状态b
的属性),但由于我只预加载我的东西一次在状态a
这是我目前使用的修复。
如何独立使用预加载的资产?
调用phaserGameInstance.state.start('b')
实际上并不会将状态从a
切换到b
。它只是将状态b
分配为要切换到的挂起状态。这意味着它是一个异步方法。
在调用phaserGameInstance.state.start('b')
后将对象添加到phaserGameInstance.world
将添加对象到状态a
,而状态b
仍然悬而未决,并将在下一次游戏更新中激活。更新发生后,phaserGameInstance.world
为空,因为当状态a
关闭时,所有对象将被删除。因此,不需要合并缓存或其他任何东西。
解决方案如下:
phaserGameInstance.state.add(
'b',
{
create: function () { // Add the assets loaded in state 'a' here ...
phaserGameInstance.add.image(0, 0, 'myImage');
}
}
);
phaserGameInstante.state.start('b');
// ... not here! State 'a' is still active in this line.
由于对象被添加到状态a
中,似乎它们会依赖于它们已预加载的状态,但实际上它们是状态独立的,正如我的问题所假定的。
相关文章:
- 州和城市选择框类似于国家细分页面
- 是否可以从独立于摄影机的three.js场景中的一个点应用雾
- 如何创建独立于数组更新的组件列表
- 点击时在元素上应用css样式,独立于父级
- 相对于选定的地区中心缩放SVG国家/地区地图
- 有没有办法使用谷歌地图javascript api突出显示一个国家,类似于嵌入api
- 谷歌地点/几何库仅适用于一个国家
- 如何引用我网站上的文档以独立于网站位置和使用位置
- 独立于原始元素复制元素
- php 服务器端计时器 独立于客户端浏览器
- 如何使 thunks 独立于状态形状以使其可移植
- 创建独立于平台的路径字符串
- 在 Jscript 中使用 DOMDocument 的独立于浏览器的方式
- Meteor如何独立于包提供的助手使用blog_posts集合
- fs.link和fs.symlink之间有什么区别?他们是独立于平台的吗
- 单页应用程序-前端独立于后端
- JS事件独立于手指压力
- javascript中的独立于浏览器的文件io
- 具有独立于控制器运行的Angular$间隔
- 移相器.io如何在全局范围内使用独立于国家的资产