小米快游戏导入为插件脚本报错

问题描述 : 导入为插件的脚本,里面的方法无法使用

  • Creator 版本:2.2.0

  • 目标平台: 小米快游戏

  • 详细报错信息,包含调用堆栈:
    Uncaught ReferenceError: plug_in_test is not defined
    at _Class3.onLoad (src/project.dev.js:45)
    at eval (cocos2d-js.js:27269)
    at _Class3.eval [as _invoke] (cocos2d-js.js:15273)
    at _Class3.invoke (cocos2d-js.js:15228)
    at _Class3.activateNode (cocos2d-js.js:27366)
    at _Class3._activate (cocos2d-js.js:11619)
    at 51.cc.Director.runSceneImmediate (cocos2d-js.js:9414)
    at eval (cocos2d-js.js:9496)
    at CCLoader.eval (cocos2d-js.js:29982)
    at eval (cocos2d-js.js:24557)

  • 重现方式:

  • 之前哪个版本是正常的 :第一次打小米快游戏 之前没打过

  • 手机型号 :
    手机用的华为荣耀9手机测试,
    按照文档安装了小米的快游戏调试器和快游戏运行环境
    又用同事的小米8青春版手机测试了,一样的报错

  • 编辑器操作系统 :macOS Catalina 版本10.15.1

@jare

@huanxinyin

你好,插件脚本不支持模块化。
在下方这则文档中有详细介绍:
https://docs.cocos.com/creator/manual/zh/scripting/plugin-scripts.html?h=插件

模块化是指 require 吗

我并没有在普通脚本里 require 插件脚本
也没有在插件脚本里 require 普通脚本
我只是在插件脚本里写了一个测试方法,在普通脚本里直接调用 打包OPPO和vivo的快游戏都是没问题的,只有小米快游戏有问题,还是说小米快游戏就是不能有插件脚本

应该是有问题,web 端能用的话,小游戏端应该都能用才对。

你看看 和我这个 问题是一样的吗 我是这样解决的
http://blog.asroads.com/post/d927b4f2.html

抱歉,这块是我们文档有误,小游戏平台目前在插件脚本里声明的变量还是局部变量,可以参考 @jsroads 的做法,将变量导出到全局

我们后续完善下文档说明

感谢大佬,顺便还意外发现了TweenMax

并不是全部的小游戏平台都这样,目前只用了3个平台:OPPO,vivo和小米,OPPO和vivo是好的,只有小米是不行的,跨平台不是应该保持一致吗,不知道这是不是引擎该修复的bug

由于平台 require 的实现不同,微信百度支付宝和小米目前是不能支持的

那好吧,至少小游戏文档里面对这点说明一下

2.22 版本插件脚本根本不会生效,要换如下写法才可以,小米的编译工具自动把文件里面所有的内容放在一个函数里面,然后加了一个return

正确的写法

(function a() {
    /*
     * 此脚本是插件脚本,目前仅仅用来声明全局变量,
     * 不能做其他任何操作,除非你知道你在做什么
     */

    // hf 这个全局表用来存储我们自己需要快速访问的一些对象

    window.hf = {}

    if (typeof (tt) === "undefined") {
        window.tt = undefined
    }

    window.hf.sceneToLoad = "MainScene"
})();