[]Laya+Matter导出wx小程序碰到的问题

layaair版本:1.7.19.1beta
环境:Win7 x64  laya + matter.js
项目类型:ts/js
 
问题描述:
1、layaair创建ts或者js项目,集成matter库(用官方给的matter.js替换,主要差别是将Matter名字空间导入到了window域,参考https://ask.layabox.com/question/14238),  需要在index.html增加matter库的引用
<script type="text/javascript" src="libs/matter.js"></script>
<script type="text/javascript" src="libs/LayaRender.js"></script>
2、为了导出小程序,需要进行wx适配的初始化,在ts/js文件中增加MiniAdpter.init();
//程序入口
Laya.MiniAdpter.init();
Laya.init(600, 400, WebGL);3、运行,无错误后,导出为“wx小游戏”
4、打开微信小程序开发工具,创建小游戏项目,选择前面步骤3导出目录,然后编译,报错:
Cannot read property 'Common' of undefined
TypeError: Cannot read property 'Common' of undefined
具体错误堆栈和对应代码位置见附件1
 
分析:  上述错误是找不到Matter变量定义,实际上替换的Matter.js在window域有导出。我对js以及小程序/游戏的js全局域不太了解,不知道为啥window域不能直接访问,或者说默认的域指向哪里?希望大家能帮答疑一下。 这里由于code.js是导出(生成)代码,尽量不要改动,我的做法是修改matter.js,在最后面直接导出Matter到全局。具体做法,在matter.js最后面增加一行:
 
var Matter = window.Matter;
 
同理,使用LayaRender的时候,在pc上调试直接使用LayaRender没任何问题,但是导出到wx小程序/游戏上会存在问题,需要使用window.LayaRender,如果觉得麻烦,也可以在LayaRender上添加一行导出全局。
        本贴并非是提倡和坚持将Matter和LayaRender导出到全局,毕竟没那么做理由也很充足,比如说不想全局名字污染,这个大家自行斟酌,这里还是聚焦laya+matter导出小游戏出现问题的分析和解决办法。
无标题.png
已邀请:

layabox

赞同来自:

不需要改Matter.js。这是你自己项目不会用。window里已经有了。项目代码里直接取用就行。
 
var Matter = window.Matter;   不要写到matter.js里。

xuezhao

赞同来自:

我也遇到了上图的这个问题,如果不修改matter.js ,var Matter = window.Matter;这行代码需要写在哪儿呢?这个报错的位置是在LayaRender.js下面吧
 

要回复问题请先

商务合作
商务合作