标签 Lua 下的文章

local function encodeHtmlSpecialChars(str)
    local html = {
        ["<"] = "&lt;",
        [">"] = "&gt;",
        ["&"] = "&amp;",
    }
    local decstr, _ = string.gsub(tostring(str), "[<>&]", function(char)
        return html[char] or char
    end)
    return decstr
end

local function decodeHtmlSpecialChars(str)
    local html = {
        ["&lt;"] = "<",
        ["&gt;"] = ">",
        ["&amp;"] = "&",
    }
    local rawstr, _ = string.gsub(tostring(str), "%b&;", function(char)
        return html[char] or char
    end)
    return rawstr
end

Lua源码未自带windows编译脚本, 自行编译过程如下

  1. 启动Visual Studio 控制台环境,以2019为例,cmd中运行下面的脚本

    D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat
  2. 在切换到lua-5.x.x/src目录下
  3. 运行下面的bat脚本进行编译

    cl /MD /O2 /c /DLUA_BUILD_AS_DLL *.c
    ren lua.obj lua.o
    ren luac.obj luac.o
    link /DLL /IMPLIB:lua.lib /OUT:lua.dll *.obj
    link /OUT:lua.exe lua.o lua.lib
    lib /OUT:lua-static.lib *.obj
    link /OUT:luac.exe luac.o lua-static.lib

-- 截取场景
cc.utils:captureNode(scene, function(image)
    -- 图片转纹理
    local texture = cc.Texture2D:new()
    texture:initWithImage(image)
    image:release()
    -- 纹理创建精灵
    local sp = cc.Sprite:createWithTexture(texture)
    sp:addTo(scene):center()
end)

测试稳定后发布到http://www.cocos2d-lua.org

总揽

在4.0.0发布以来,进过了大量的改进。FairyGUI的支持上踩了大量的坑:绑定补全、hitTest、富文本的支持、window的事件封装等等。Spine的3.8运行时也有大量的改进,进行了同步。新加了Linux的支持个测试,修正了一些问题,但还遗留了EditBox这个已知坑点。加入了AsyncTCP,文档后补吧。TiledMap继续进行功能支持改进。

阅读剩余部分

local sharedTextureCache = cc.Director:getInstance():getTextureCache()
local sharedSpriteFrameCache = cc.SpriteFrameCache:getInstance()

local imgs = {'14392.PNG', '14393.PNG', '14394.PNG', '14395.PNG'}
for _, img in ipairs(imgs) do
    local tx = sharedTextureCache:addImage(img)
    local rect = tx:getContentSize()
    rect.x = 0
    rect.y = 0
    local frame = cc.SpriteFrame:createWithTexture(tx, rect)
    sharedSpriteFrameCache:addSpriteFrame(frame, img)
end

local frames = display.newFrames("%d.PNG", 14392, 4)
dump(frames)

coroutine.resume 会使用coroutine.create创建的lua_state进行执行,导致to_lua的绑定代码的L会混乱。一些回调函数的执行会破坏参数。

要使用协程,建议coroutine.create中的逻辑无任何to_lua的绑定代码执行。

display.newSprite("hideback.png"):addTo(self):center()

local render = cc.RenderTexture:create(display.width, display.height):center():addTo(self)
local sp = cc.Sprite:create("HelloWorld.png"):center()

render:begin()
sp:visit()
render:endToLua()

local circle = display.newSolidCircle(20,{color = cc.c4f(0.5, 0.5, 0.5, 0)})
circle:retain()
circle:setBlendFunc(cc.blendFunc(cc.backendBlendFactor.SRC_ALPHA, cc.backendBlendFactor.ZERO))

self:addNodeEventListener(cc.NODE_TOUCH_EVENT,function ( event )
    if event.name == "began" then
        return true
    end

    if event.name == "moved" then
        circle:pos(event.x,event.y)
        render:begin()
        circle:visit()
        render:endToLua()
    end
end)
self:setTouchEnabled(true)