Quick-cocos2d-x中require和import用法

require是Lua自带的函数,require("test")有2个作用: 

1.执行文件test.lua中直接调用的语句,多次调用require一个文件只会执行一次

2.加载test.lua中的表,变量,函数等定义的东西

要注意的是require查找文件的路径,其保存在package.path中,这种路径是"模板式的路径",它里面会包含可替代符号"?",这个符号会被替换,然后lua查找这个文件是否存在.可以通过print(package.path)查看路径,例如我print的路径信息为:

.\?.lua;

D:\QuickRoot\Quick0\frameworks\runtime-src\proj.win32\Debug.win32\lua\?.lua;

D:\QuickRoot\Quick0\frameworks\runtime-src\proj.win32\Debug.win32\lua\?\init.lua;

src\

路径中的问号会被替换为文件或文件夹名,例如require("a.b")时,.会被翻译为目录分隔符\ ; 查找文件为:

.\a\b.lua;

D:\QuickRoot\Quick0\frameworks\runtime-src\proj.win32\Debug.win32\lua\a\b.lua;

D:\QuickRoot\Quick0\frameworks\runtime-src\proj.win32\Debug.win32\lua\a\b\init.lua;

src\a\b.lua

因此使用require时并不会在本文件所在同级目录查找,quick中main.lua里有这么一句:

package.path = package.path .. ";src/" 因此可以使用这样字符串追加的方式增加新的查找路径


import是quick-cocos2d-x框架中的函数,定义在functions.lua中,其内部实现最终也是调用require,和require相比import加载文件后的效果相同,支持在package.path路径中搜索; 区别是import支持同级目录和上级目录搜索,同级目录搜索加一个点:import(".test"),上级目录搜索加2个点:import("..test"),依次类推.

不过 import() 只有在模块级别调用(也就是没有将 import() 写在任何函数中)时,才能够自动得到当前模块名。如果需要在函数中调用 import(),那么就需要指定当前模块名:

    local CURRENT_MODULE_NAME = ...
    self.sprite:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event) 
        import("..test", CURRENT_MODULE_NAME)
        return false
    end)



你可能感兴趣的:(cocos2dx)