USE " cc.exports.* = value " INSTEAD OF SET GLOBAL VARIABLE"

Cocos2d-x 3.5的lua项目生成后,变成了MVC模式,而且,加入了一个全局变量的检测功能。也就是说,你不当心用了全局变量,他会提示你出错!socket

好比函数

local temp = 1ui

temp = 10lua

print(temp)spa

你写成了orm

local temp = 1开发

tepm = 10 –这里写错了string

print(temp)it

而后,print结果就会不一样,同时你还会建立一个 全局的 tepm 永远不会被释放。这种问题,在lua中很容易遇到(虽然如今有代码提示 仍是不太容易出现,可是谁说的准呢!)。io

因此,C2d加入了一个全局命名空间的检测,经过setmetatable的方式。该函数在

src/cocos/framework/init.lua

-- disable create unexpected global variable
function cc.disable_global()
    setmetatable(__g, {
        __newindex = function(_, name, value)
            error(string.format("USE \" cc.exports.%s = value \" INSTEAD OF SET GLOBAL VARIABLE", name), 0)
        end
    })
end

if CC_DISABLE_GLOBAL then
    cc.disable_global()
end<span style="font-family:Arial;font-size:18px;color:#333333;"><span style="line-height: 26px;">
</span></span>

有效的帮助开发者避免上述错误!

那么若是我必定要用到全局变量才行呢?例如 require "socket" 的luasocket库

这个问题有若干种解决办法,

一、最简单粗暴的就是直接注释掉着一块。

二、将CC_DISABLE_GLOBAL设置为False

三、在mian.lua的 require "cocos.init"以前 require 所需的库和全局的变量

可是 若是是开发者本身须要使用全局变量。而不是其余库须要用到全局变量的话!

请使用使用官方推荐的方法cc.exports.* 来充当全局变量!

如:cc.exports.MY_GLOBAL = "hello"

相关文章
相关标签/搜索