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"