/wx_game_three

将three.js应用于微信小游戏的demo

Primary LanguageJavaScript

微信小游戏示例

源码目录介绍

./js
│  game.js
│  game.json
│  project.config.json      
│  README.md
│
├─images
│
└─js
    │  main.js
    │
    └─libs
            OrbitControls.js
            symbol.js         //内置适配层,必须
            three.js
            weapp-adapter.js  //内置适配层,必须

熟悉three.js的同学,我就不仔细介绍目录的作用了。这里给出一个很简单的demo,在scene中add一个奔跑的兔子。

issue答疑

项目运行中你可能会遇到以下几类问题。

1、TypeError: n.addEventListener is not a function(load Model)

这是因为微信给出的XMLHttpRequest缺少addEventListener,我们在weapp-adapter.js中添加上去,找到XMLHttpResquest的定义部分

{
  key: 'addEventListener',
  value: function addEventListener(type, listener) {
    if (typeof listener === 'function') {
      let event = { target: this }
      let that = this
      this['on' + type] = function () {
        listener.call(that, event)
      }
    }
  }
}

2、交互OrbitControls,一动屏幕就清空

这是因为element.clientWidth/clientHeight微信不支持,改成window.innerWidth/innerHeight就行啦

3、真机测试,scene未渲染

这是因为移动端微信的标准是openGL,而非webgl,修改three.js代码。

var version = parseFloat( /^(WebGL|OpenGL ES)\ ([0-9])/.exec( gl.getParameter( gl.VERSION ) )[ 1 ] );  

4、小游戏中暴露了canvas接口,与实际浏览器中three.js开发略有区别

wenbrenderer中需要设置:

let ctx = canvas.getContext('webgl');
//···
renderer = new THREE.WebGLRenderer({
        canvas: canvas,
        context: ctx,
        alpha: true,
        antialias: true,
      });

demo