coco2d-x 3.0 体验lua

从来没有学过lua,但是从网上的一些大神来看,lua是一种非常厉害的语言,它非常小,编程很快,而且可以用在服务器端......所以这段时间也是偷偷的学习了点lua,主要是看了Cocos2d-x的lua创建例子,初步了解了下cocos2d-x运行lua的方法...这里我也稍稍的尝试了一下,把原来的例子改成我们熟悉的HelloWord界面。

Cocos2d-x里是怎么调用外部的lua的

这是在Cocos2d-x的AppDelegate.cpp里的一段代码,这个就是关键,它在这里启动了个lua的引擎,然后加载了外部的lua文件

// register lua engine
    auto engine = LuaEngine::getInstance();//这个应该是lua的引擎吧
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    
    //The call was commented because it will lead to ZeroBrane Studio can't find correct context when debugging
    //engine->executeScriptFile("hello.lua");
    engine->executeString("require 'hello.lua'");//然后在这里加载了外部的“hello.lua”这个文件

我们能在资源文件夹里发现hello.lua这个文件,貌似所有的lua都放在这个文件夹下,lua的原代码就不看了,直接修改后的代码

require "Cocos2d"
-- cclog
cclog = function(...)
    print(string.format(...))
end

-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
    cclog("----------------------------------------")
    cclog("LUA ERROR: " .. tostring(msg) .. "\n")
    cclog(debug.traceback())
    cclog("----------------------------------------")
end

local function main()
    -- avoid memory leak
    collectgarbage("setpause", 100)
    collectgarbage("setstepmul", 5000)

    --support debug
    local targetPlatform = cc.Application:getInstance():getTargetPlatform()
    if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) or 
       (cc.PLATFORM_OS_ANDROID == targetPlatform) or (cc.PLATFORM_OS_WINDOWS == targetPlatform) or
       (cc.PLATFORM_OS_MAC == targetPlatform) then
        local host = 'localhost' -- please change localhost to your PC's IP for on-device debugging
        require('mobdebug').start(host)
    end
    require "hello2"
    cclog("result is " .. myadd(1, 1))

    ---------------

    local visibleSize = cc.Director:getInstance():getVisibleSize()
    local origin = cc.Director:getInstance():getVisibleOrigin()

    -- 这个方法就是我修改的
	function createLayer()
		--创建一个层
		local layer=cc.Layer:create()
		--背景精灵
		local bg=cc.Sprite:create("HelloWorld.png")
		bg:setPosition(origin.x + visibleSize.width / 2 , origin.y + visibleSize.height / 2)
		layer:addChild(bg)
		--HelloWorld
		local label=cc.LabelTTF:create("HelloWorld","Arial",24)
		label:setPosition(origin.x+visibleSize.width/2,origin.y+visibleSize.height*0.9)
		layer:addChild(label)
		function callBack()
			cclog("end")
			--cc.Director:getInstance()
		end
		--按钮
		local menuItenImage=cc.MenuItemImage:create("CloseNormal.png","CloseSelected.png")
		menuItenImage:registerScriptTapHandler(callBack)
		--menuItenImage:setPosition(cc.Point:ZERO)
		local menu=cc.Menu:create(menuItenImage)
		menu:setPosition(origin.x+visibleSize.width-menuItenImage:getContentSize().width/2,origin.y+menuItenImage:getContentSize().height/2)
		layer:addChild(menu)
		return layer
	end
    

    -- run
    local sceneGame = cc.Scene:create()
    sceneGame:addChild(createLayer())
    --sceneGame:addChild(createLayerMenu())
    cc.Director:getInstance():runWithScene(sceneGame)
end

xpcall(main, __G__TRACKBACK__)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值