Cocos2dx lua

使用版本cocos2dx2.2版本、呵呵呵呵


http://www.mamicode.com/info-detail-936871.html



1,cocos2dx_support,lua,luajit,tolua

2,添加之后报错,点run报错。是因为缺少cocostudio这个库

3,我们就可以使用lua脚本了,我们先简单写一个测试的

(功能为在c++加载一个CClayer,CClayer中有一个背景精灵图片)

首先我们需要先把lua脚本代码写出来

testlua.lua

 

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

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

    local cclog = function(...)
        print(string.format(...))
    end
    
    local visibleSize = CCDirector:sharedDirector():getVisibleSize()
    local origin = CCDirector:sharedDirector():getVisibleOrigin()
    
    local function createLayerMap()
        local layerWroldMap = CCLayer:create()

        local bg = CCSprite:create("luaimg/bd.jpg")
        bg:setPosition(origin.x + visibleSize.width / 2 + 80, origin.y + visibleSize.height / 2)
        layerWroldMap:addChild(bg,1)

        return layerWroldMap

    end

    CCDirector:sharedDirector():getRunningScene():addChild(createLayerMap(),3,1)
   
end

xpcall(main, __G__TRACKBACK__)
在之前我已经写了一个单例方法使用的PublicLuaTodo类,主要是引用官方给我们提供的CCLuaEngine(LUA支持引擎)
PublicLuaTodo.h
#include "cocos2d.h"
#include "script_support/CCScriptSupport.h"
#include "../../../lua/cocos2dx_support/CCLuaEngine.h"
#include <string>

using namespace std;
USING_NS_CC;

class PublicLuaTodo:public CCObject
{
public:
    PublicLuaTodo(void);
    ~PublicLuaTodo(void);
    static PublicLuaTodo* getInstance();
    //执行lua文件
    static void toDoLuaFile(string luapath);
    //执行lua语句
    static void toDoLuaString(string luastring);
    //执行一个lua全局的方法
    static void toDoLuaGlobalFunction(string founctionname);
private:
    static PublicLuaTodo* m_instance;
};

PublicLuaTodo.cpp
#include "PublicLuaTodo.h"
CCLuaEngine* pEngine;
PublicLuaTodo* PublicLuaTodo::m_instance = NULL;
PublicLuaTodo* PublicLuaTodo::getInstance()
{
    if(!m_instance)
    {
        
        m_instance = new PublicLuaTodo();
    }
    return m_instance;
}

PublicLuaTodo::PublicLuaTodo()
{
    pEngine = CCLuaEngine::defaultEngine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
    
}

void PublicLuaTodo::toDoLuaFile(string luapath)
{
    std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename(luapath.c_str());
    pEngine->executeScriptFile(path.c_str());
}

void PublicLuaTodo::toDoLuaString(string luastring)
{
    pEngine->executeString(luastring.c_str());
}

void PublicLuaTodo::toDoLuaGlobalFunction(string founctionname)
{
    pEngine->executeGlobalFunction(founctionname.c_str());
}

PublicLuaTodo::~PublicLuaTodo(void)
{
   if(!pEngine)
   {
       pEngine=NULL;
   }
}

执行我们已经写好的lua文件
string luafile = "test/test.lua";
PublicLuaTodo::getInstance()->toDoLuaFile(luafile);

我把上段代码写到了helloapp里面的关闭方法中,很方便就能运行起来lua新加的层

Android上面绑lua
1,同样也是先创建一个新工程
./create_project.py -project XXX-package com.xxx.XXX -language cpp
2,将刚才我们在Xcode上写的东西新加的类都移植(复制对应目录就行),并编写对应的.mk文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值