要测试代码,写完就能看到效果,不用重启 exe,加快开发速度。运用这个原理写其他代码也一样。
核心原理 package.loaded["xxx"] = nil,让lua虚拟机重新读取 xxx代码。
local MainLayer = class("MainLayer")
function MainLayer.showUI()
local layer = cc.LayerColor:create(cc.c4b(0,0,0,255))
-- local snake = require("app.game.snake.snake")
-- snake.showUI(layer)
-- print(nil == false)
-- local someTest = require("app.game.snake.someTest")
-- someTest.showUI(layer)
require("app.jzq")
jzq.init(layer)
return layer
end
return MainLayer
--临时测试代码用,退出重新读取页面lua文件,不用重启exe
cc.exports.jzq = {}
--没有限制全局变量直接 jzq={}
function jzq.reFreashJzq2()
log("are jzq2 ok")
if package.loaded["app.jzq2"] then
jzq2.clear()
package.loaded["app.jzq2"] = nil
jzq2 = nil
end
--最核心部分 让lua重新读取 jzq2.lua文件
require("app.jzq2")
end
function jzq.init(mainLayer)
local layer = cc.Layer:create()
local function onKeyPressed(keyCode,event)
if keyCode == 133 then --j
jzq.reFreashJzq2()
end
end
local function onKeyReleased(keyCode,event)
log("释放"..keyCode)
end
local listener = cc.EventListenerKeyboard:create()
listener:registerScriptHandler(onKeyPressed, cc.Handler.EVENT_KEYBOARD_PRESSED)
--listener:registerScriptHandler(onKeyReleased, cc.Handler.EVENT_KEYBOARD_RELEASED)
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, layer)
layer:addTo(mainLayer, 10000)
jzq.layer = layer
end
--把一些常用代码复制到这里,用的时候直接从这里复制。
--要不是这里放的代码太多,我直接用这个文件重载代码就行了。
return jzq
cc.exports.jzq2 = {}
function jzq2.Test()
--测试代码写在这里,写完直接刷新运行看效果
log("jzq2 very ok")
end
function jzq2.clear()
jzq2.layer:removeFromParent()
end
jzq2.count = 0
function jzq2.init()
jzq2.count = jzq2.count + 1
if jzq2.count == 2 then
error("俺也不知道发生了啥事")
end
local layer = cc.LayerColor:create(cc.c4b(255,255,255,125),200,100)
layer:addTo(jzq.layer):move(20,100)
jzq2.layer = layer
local listenner = cc.EventListenerTouchOneByOne:create()
listenner:setSwallowTouches(true)
listenner:registerScriptHandler(function(touch, event)
if cc.rectContainsPoint(layer:getBoundingBox(), touch:getLocation() ) then
return true
end
return false
end, cc.Handler.EVENT_TOUCH_BEGAN )
listenner:registerScriptHandler(function(touch, event)
layer:setPosition(cc.pAdd(touch:getDelta(),cc.p(layer:getPosition())))
end, cc.Handler.EVENT_TOUCH_MOVED )
--[[ 实现 onTouchEnded 事件回调函数
listenner:registerScriptHandler(function(touch, event)
--print("EVENT_TOUCH_ENDED")
end, cc.Handler.EVENT_TOUCH_ENDED )
listenner:registerScriptHandler(function(touch, event)
--print("EVENT_TOUCH_CANCELLED")
end, cc.Handler.EVENT_TOUCH_CANCELLED )]]
local eventDispatcher = layer:getEventDispatcher()
-- 添加监听器
eventDispatcher:addEventListenerWithSceneGraphPriority(listenner, layer) --33333
--现在jzq2可以随便拖到,防止当着ui了
local label = cc.Label:createWithSystemFont("jzq2重载成功", "", 30)
label:setColor(cc.c3b(255,0,0))
label:addTo(layer):move(100,-20)
label:runAction(cc.FadeOut:create(3))
--加个提示
local txt = ccui.Text:create("重载", "", 30)
txt:setTouchEnabled(true)
txt:addClickEventListener(function(sender)
jzq.reFreashJzq2()
--现在直接点也可以刷新了,不用按j键了
log(sender:getName())
end)
txt:setColor(cc.c3b(255,0,0))
txt:addTo(layer):move(100,20):setName("txt")
jzq2.Test()
end
jzq2.init()
return jzq2
找不到工作啊