精华内容
下载资源
问答
  • cocos2dx-lua-Tetris cocos2dx lua Tetris(俄罗斯方块)3.17最新项目源码 如果遇到版本或其他相关问题 可以直接联系我,或者给我私信
  • Cocos2dx lua

    2016-09-12 15:29:24
    使用版本cocos2dx2.2版本、呵呵呵呵 ...1,cocos2dx_support,lua,luajit,tolua 2,添加之后报错,点run报错。是因为缺少cocostudio这个库 3,我们就可以使用lua脚本了,我们先简单写一个测试的 (功能为在c++加载一

    使用版本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文件

    展开全文
  • cocos2dx lua绑定

    2016-08-26 10:02:28
    cocos2dx lua绑定,基于tolua++、Python工具实现cococs2dx环境下的lua脚本绑定。
  • cocos2dx lua解密工具

    2018-10-15 09:24:30
    cocos2dx lua 解密工具xxtea_decrypt,非常好用,直接就可以反编译出来
  • cocos2dx lua

    2015-09-28 13:47:00
    採用游戏脚本lua、python等进行开发也非经常见,可是非常多童鞋对脚本并没有非常熟悉的概念,本篇则向大家简介脚本的用途以及在Cocos2dx基础使用方法; Lua和python这些具体介绍的话。请不太熟悉的童鞋自行百度...

    对于游戏公司而言。採用游戏脚本lua、python等进行开发也非经常见,可是非常多童鞋对脚本并没有非常熟悉的概念,本篇则向大家简介脚本的用途以及在Cocos2dx基础使用方法;

    Lua和python这些具体介绍的话。请不太熟悉的童鞋自行百度百科哈,那么对于lua和python则是两个经常使用的脚本语言。lua相对于python而言。lua比較轻量级罢了,而其它差别就不多说了,可是为什么本章要解说lua的原因则有两点。首先第一:cocos2dx 游戏引擎内嵌lua,第二点:自从“令人愤慨的小鸟”火起来之后,国内非常多都偏向于使用lua了=。 =

    那么对于脚本的用途这里也大概说两点:

    1.  脚本在手游中是类于“大脑”的功能。全部游戏相关的逻辑代码一般都放在脚本中,而client(前台)的代码都则属于“肢体”,也能够说是“播放器”,作用不过用户展示出UI界面的功能;那么脚本的作用那么不只如此,比方地图数据等都能够利用脚本使用;

    2. 脚本在手机网游中的作用尤为重要,比方一款网游“Himi”没有使用脚本,假设“Himi”1.0版本号在公布后突然发现client出现一些棘手的bug须要修复,那么你想改动那么也要等待再次更新client又一次提交公布才干够解决,这样会流失一大批用户。并且游戏每次更新也会流失掉部分用户。这是肯定的;可是假设“Himi”这款网游使用脚本的话,那么解决此类问题非常eazy。比方我在“Himi”游戏中的逻辑代码都放在脚本a.lua 中,那么假设a.lua逻辑中哪里出现了问题,我们直接能够将修复后的a.lua脚本更新至server中,由于一般脚本都会定义version号,比方a.lua有bug的version:1.0,那么我们修复后的a.lua version改成1.1。当用户每次启动游戏的时候,client都会将脚本的version与服务器脚本version做对照。当server端脚本version号比当前脚本新,那么自己主动下载并覆盖当前脚本,OK,问题解决;不只如此,比方游戏中做个活动呀。换个图片呀等等都能够即使更新。而不是每次改动前端代码都要又一次公布新的游戏版本号,造成一些损失。

    OK,不再多说了,以下我们来介绍在Cocos2dx中对于lua脚本的一些简单使用,首先我们通过新建一个Cocos2dx-lua模版项目,默认此模版中有个演示样例,童鞋们能够直接执行项目看效果,可是大家可能会郁闷在class中全然找不到不论什么相关的代码?。?那就对了,由于全部逻辑代码都放置在了lua脚本中。项目启动后直接解析的一个名称为hello.lua的脚本!

    打开项目的Resources细致找下,有没有发现有 hello.lua 合hello2.lua两个脚本文件?!OK,就是这里拉。 那么对于cocos2dx_lua demo的样例脚本我这里不多说比較easy,可是肯定不太熟悉的童鞋比較疑惑。那么Himi这里又一次整理了一份简单的演示样例脚本代码,大家能够直接将例如以下代码直接拷贝到hello.lua中看效果;代码例如以下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    require "hello2"  -- 包括hello2这个脚本
     
    -- 注视语句
     
    -- 基本上调用的cocos2dx函数和类的时候就是以cocos2d.*这样子来用
    -- 注意2:function keyword定义函数,end结束函数
     
    -- 打印
    cocos2d.CCLuaLog("脚本hello開始执行... " .. myadd(3, 5))
     
    -- 创建一个Scene
    sceneForWorld = cocos2d.CCScene:node()
     
    -- 创建一个Layer
    layerForWorld = cocos2d.CCLayer:node()
    sceneForWorld:addChild(layerForWorld)
     
    -- 创建一个精灵
    spriteForWorld  = cocos2d.CCSprite:spriteWithFile("Icon.png")
    layerForWorld:addChild(spriteForWorld)
     
    -- 获取屏幕宽高
    screenSize=cocos2d.CCDirector:sharedDirector():getWinSize()
     
    -- 设置精灵坐标
    spriteForWorld:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5))
     
    -- 设置精灵缩放2倍
    spriteForWorld:setScale(2)
     
    -- 加入一个CCLabelTTF    (!

    !!

    !。备注!!

    !。。!

    myLableTTF =cocos2d.CCLabelTTF:labelWithString("Himi- Lua 基础","Helvetica-Bold",24)
    myLableTTF:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5+100))
    sceneForWorld:addChild(myLableTTF)
    -- 加入一个CCLabelTTF
    myLableTTF2 =cocos2d.CCLabelTTF:labelWithString("上面icon尾随用户触屏位置","Helvetica-Bold",24)
    myLableTTF2:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5-100))
    sceneForWorld:addChild(myLableTTF2)
     
    --   @@@@@@@@@@触摸事件
     
    --开启触摸
    layerForWorld:setIsTouchEnabled(true)
     
    -- 注冊触摸事件
    layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHBEGAN, "btnTouchBegin")
    layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHMOVED, "btnTouchMove")
    layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHENDED, "btnTouchEnd")
     
    -- touch handers
    pointBegin = nil
     
    function btnTouchBegin(e)
        cocos2d.CCLuaLog("btnTouchBegin")
        local v = e[1]
        local pointMove = v:locationInView(v:view())
        pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)
        spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))
    end
     
    function btnTouchMove(e)
        cocos2d.CCLuaLog("btnTouchMove")
        local v = e[1]
        local pointMove = v:locationInView(v:view())
        pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)
        spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))
    end
     
    function btnTouchEnd(e)
        cocos2d.CCLuaLog("btnTouchEnd")
    end
     
    --   @@@@@@@@@@触摸结束
     
    --动态小狗
    winSize = cocos2d.CCDirector:sharedDirector():getWinSize()
    FrameWidth = 105
    FrameHeight = 95
     
    textureDog = cocos2d.CCTextureCache:sharedTextureCache():addImage("dog.png")
    frame0 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(0, 0, FrameWidth, FrameHeight))
    frame1 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(FrameWidth*1, 0, FrameWidth, FrameHeight))
     
    spriteDog = cocos2d.CCSprite:spriteWithSpriteFrame(frame0)
    spriteDog:setPosition(cocos2d.CCPoint(100, winSize.height/4*3))
    layerForWorld:addChild(spriteDog)
     
    animFrames = cocos2d.CCMutableArray_CCSpriteFrame__:new(2)
    animFrames:addObject(frame0)
    animFrames:addObject(frame1)
     
    animation = cocos2d.CCAnimation:animationWithFrames(animFrames, 0.5)
     
    animate = cocos2d.CCAnimate:actionWithAnimation(animation, false);
    spriteDog:runAction(cocos2d.CCRepeatForever:actionWithAction(animate))
     
    --自己定义函数
    function prForHimi()
        cocos2d.CCLuaLog("reFresh function")
        --取消选择器
        --cocos2d.CCScheduler:sharedScheduler():unscheduleScriptFunc("prForHimi")
    end
     
    --使用选择器进行函数更新
    --cocos2d.CCScheduler:sharedScheduler():scheduleScriptFunc("prForHimi", 1, false)
     
    --循环语句
    for i=0,4,1 do
        for j=0,4,2 do
            cocos2d.CCLuaLog("for loop",i)
        end
    end
     
    -- 避免内存泄漏
    collectgarbage( "setpause", 100)
    collectgarbage( "setstepmul", 5000)
     
    -- 播放背景音乐
    --CocosDenshion.SimpleAudioEngine:sharedEngine():playBackgroundMusic("background.mp3", true)
    -- 播放音效
    --CocosDenshion.SimpleAudioEngine:sharedEngine():preloadEffect("effect1.wav")
     
    -- run整个scene
    cocos2d.CCDirector:sharedDirector():runWithScene(sceneForWorld)
     
    cocos2d.CCLuaLog("脚本hello正常运行结束... " .. myadd(3, 5))

    执行效果图例如以下:

    对于Himi上面给出的自己改动后的代码注视写的狠清楚了 =。

    = 所以不多加赘述,可是Himi这里须要还要具体说一点;

    脚本lua等一般都示通过中间层(解析)进行与前端代码(Cocos2dX封装的引擎类库)交互,所以非常多方法名称可能发生了改变,那么对于不太熟悉的童鞋我们怎样下手?

    OK。如刚才的代码中有个“备注”,不知道细心童鞋们看到没有,这里是加入了一个CCLabelTTF 。假如我们不知道它的构造函数是否有改动,或者说參数忘记都是什么了,那么请打开你项目的libs目录,然后打开lua目录,继续打开cocos2dx_support目录找到 LuaCocos2d.cpp文件打开。(注意这个文件代码非常多。打开较慢)然后你会看到非常多方法的定义与实现。

    那么假如我们来找 CCLabelTTF的构造方法。那么搜一下例如以下语句:

    1
    tolua_beginmodule(tolua_S,"CCLabelTTF");

    你将发现此类下方一大批类似的代码:

    没错这里就是此类的全部是lua-cocos2dx之间的转换函数定义,比方经常使用的CCLabelTTF构造函数:

    1
    tolua_function(tolua_S,"labelWithString",tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01);

    此函数第一參数大家不用理会,第二个參数表示我们使用cocos2d/x时调用的函数名称。后面则是lua-cocos2dx之间的转换函数实现代码。大家能够继续搜索第三个參数或者按住command然后点击第三个參数找到其函数实现代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /* method: labelWithString of class  cocos2d::CCLabelTTF */
    #ifndef TOLUA_DISABLE_tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01
    static int tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01(lua_State* tolua_S)
    {
     tolua_Error tolua_err;
     if (
         !tolua_isusertable(tolua_S,1,"cocos2d::CCLabelTTF",0,&tolua_err) ||
         !tolua_isstring(tolua_S,2,0,&tolua_err) ||
         !tolua_isstring(tolua_S,3,0,&tolua_err) ||
         !tolua_isnumber(tolua_S,4,0,&tolua_err) ||
         !tolua_isnoobj(tolua_S,5,&tolua_err)
     )
      goto tolua_lerror;
     else
     {
      const char* label = ((const char*)  tolua_tostring(tolua_S,2,0));
      const char* fontName = ((const char*)  tolua_tostring(tolua_S,3,0));
      float fontSize = ((float)  tolua_tonumber(tolua_S,4,0));
      {
       cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*)  cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);
        tolua_pushusertype(tolua_S,(void*)tolua_ret,"cocos2d::CCLabelTTF");
      }
     }
     return 1;
    tolua_lerror:
     return tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString00(tolua_S);
    }
    #endif //#ifndef TOLUA_DISABLE

    在这里看到此函数转换过程,并能够非常清楚看到:

    1
    cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*)  cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);

    到这里大家会非常清楚须要的參数都是哪些,假设还不清楚,继续按住Command然后点击labelWithString进入cocos2dx引擎代码 CCLabelTTF.cpp中的此函数实现啦!

    可能这部分有童鞋看得比較迷茫 =。 = 那么Himi来简化这些复杂来说:

    解析lua脚本中的一句代码->通过解析层代码->将其转换并转到前端代码进行使用

    那么当然此过程也可逆:

    前端代码->通过解析层代码->使用lua脚本中东东

    这里因为Himi对cocos2dx 中的lua还没有深入了解。所以不知是否过程可逆;

    OK,基本就是这样。对于脚本的熟悉,主要还是在公司进行使用然后慢慢熟悉和熟培养掌握,童鞋的主要章节需要记住的是脚本的概念和作用!

    版权声明:本文博主原创文章,博客,未经同意不得转载。

    展开全文
  • quick cocos2dx lua -v3.3

    2017-04-03 14:53:45
    quick cocos2dx lua -v3.3
  • [cocos2dx lua]cocos2dx lua入门

    千次阅读 2014-07-16 21:17:46
     cc.MoveBy:create(2, cc.p(200,0)),   cc.CallFunc:create(CallFucnCallback1) )   grossini:runAction(action)  最基础的字符格式化 [plain]   view plain copy string.format("grossini_dance_%02d.png...

    最基本的层

    1. function createInGameLayer()   
    2.         local inGameLayer = cc.Layer:create()  
    3.         return inGameLayer  
    4.     end  

    最基本的场景

    1.  local sceneGame = cc.Scene:create()  
    2.     sceneGame:addChild(createInGameLayer())  
    3.   
    4. cc.Director:getInstance():runWithScene(sceneGame)  
    5. cc.Director:getInstance():replaceScene(cc.TransitionFade:create(1,WelcomeScene.createScene()))  

    最基本的精灵

    1. function createInGameLayer()   
    2.         local inGameLayer = cc.Layer:create()  
    3.         local bg = cc.Sprite:create("farm.jpg")  
    4.         bg:setAnchorPoint(0,0)  
    5.         inGameLayer:addChild(bg)  
    6.         return inGameLayer  
    7. end  

    最基本的定时器
    1. local function tick()  
    2.             
    3.        end  
    4.   
    5.        cc.Director:getInstance():getScheduler():scheduleScriptFunc(tick, 0, false)  


    最基本的触摸事件

    1. local touchBeginPoint = nil  
    2.         local function onTouchBegan(touch, event)  
    3.             local location = touch:getLocation()  
    4.             cclog("onTouchBegan: %0.2f, %0.2f", location.x, location.y)  
    5.             touchBeginPoint = {x = location.x, y = location.y}  
    6.             -- CCTOUCHBEGAN event must return true  
    7.             --[[多点  
    8.              for i = 1,table.getn(touches) do  
    9.              local location = touches[i]:getLocation()  
    10.              Sprite1.addNewSpriteWithCoords(Helper.currentLayer, location)  
    11.              end  
    12.             ]]--  
    13.             return true  
    14.         end  
    15.   
    16.         local function onTouchMoved(touch, event)  
    17.             local location = touch:getLocation()  
    18.             cclog("onTouchMoved: %0.2f, %0.2f", location.x, location.y)  
    19.             if touchBeginPoint then  
    20.                 local cx, cy = layerFarm:getPosition()  
    21.                 layerFarm:setPosition(cx + location.x - touchBeginPoint.x,  
    22.                                       cy + location.y - touchBeginPoint.y)  
    23.                 touchBeginPoint = {x = location.x, y = location.y}  
    24.             end  
    25.         end  
    26.   
    27.         local function onTouchEnded(touch, event)  
    28.             local location = touch:getLocation()  
    29.             cclog("onTouchEnded: %0.2f, %0.2f", location.x, location.y)  
    30.             touchBeginPoint = nil  
    31.             spriteDog.isPaused = false  
    32.         end  
    33.   
    34.         local listener = cc.EventListenerTouchOneByOne:create()  
    35.         --local listener = cc.EventListenerTouchAllAtOnce:create() 多点  
    36.         listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )  
    37.         listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )  
    38.         listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )  
    39.         local eventDispatcher = layerFarm:getEventDispatcher()  
    40.         eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layerFarm)  

    最基本的音乐
    1. --local bgMusicPath = CCFileUtils:getInstance():fullPathForFilename("background.ogg")  
    2.   
    3.    local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename("background.mp3")  
    4.   
    5.    cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)  
    6.    local effectPath = cc.FileUtils:getInstance():fullPathForFilename("effect1.wav")  
    7.   
    8.    cc.SimpleAudioEngine:getInstance():preloadEffect(effectPath)  
    9.   
    10.    local function menuCallbackOpenPopup()  
    11.            -- loop test sound effect  
    12.            local effectPath = cc.FileUtils:getInstance():fullPathForFilename("effect1.wav")  
    13.            effectID = cc.SimpleAudioEngine:getInstance():playEffect(effectPath)  
    14.            menuPopup:setVisible(true)  
    15.        end  

    最基本的加载图片
    1. cc.Director:getInstance():getTextureCache():addImageAsync("DartBlood.png",imageLoaded)  
    2. local texture0 = cc.Director:getInstance():getTextureCache():addImage( "Images/grossini_dance_atlas.png")  
    3.   
    4. function LoadingScene.imageLoaded( pObj)  
    5.     -- body  
    6. end  
    7.   
    8. cc.Director:getInstance():getTextureCache():removeTextureForKey("Images/grossinis_sister1-testalpha.png")  
    9. cc.Director:getInstance():getTextureCache():removeAllTextures()  
    10. cc.Director:getInstance():getTextureCache():removeUnusedTextures()  
    11.   
    12. local cache = cc.SpriteFrameCache:getInstance()  
    13. cache:addSpriteFrames("animations/grossini_gray.plist", "animations/grossini_gray.png")  
    14. SpriteFrameTest.m_pSprite1 = cc.Sprite:createWithSpriteFrameName("grossini_dance_01.png")  

    最基础的动作

    1. local function CallFucnCallback1()  
    2.       
    3. end  
    4.   
    5. local action = cc.Sequence:create(  
    6.         cc.MoveBy:create(2, cc.p(200,0)),  
    7.         cc.CallFunc:create(CallFucnCallback1) )  
    8.  grossini:runAction(action)  

    最基础的字符格式化

    1. string.format("grossini_dance_%02d.png", j + 1)  

    最基础的按钮
    1. local start = cc.Sprite:createWithSpriteFrameName("start.png")  
    2.   
    3.   
    4. local  startItem = cc.MenuItemSprite:create(start, start, start)  
    5.   
    6.   
    7. local function menuCallback(sender)  
    8.     cclog("menuCallback...")  
    9.     --tolua.cast(ret:getParent(), "cc.LayerMultiplex"):switchTo(1)  
    10. end  
    11.   
    12.   
    13. startItem:registerScriptTapHandler(menuCallback)  
    14. startItem:setPosition(50,50)  
    15.   
    16.   
    17. local  menu = cc.Menu:create()  
    18. menu:addChild(startItem)  
    19. menu:setPosition(0,0)  
    20. layer:addChild(menu)  


    展开全文
  • cocos2dx lua 加密

    万次阅读 2014-07-25 10:29:09
    cocos2dx lua 加密
    cocos2dx lua 加密
            cocos2dx lua已经集成了对lua脚本的加解密,见AppDelegate.cpp.
        LuaStack* stack = engine->getLuaStack();
        stack->setXXTEAKeyAndSign("123", strlen("123"), "cloud", strlen("cloud"));
    它是通过XXTEA来加解密的。参数,key,keyLen,signment,signmentLen。它的签名作用可能是用来判断文件是否经过加密的。
           好,我们来对文件加密。打开cocos2d-x\external\xxtea文件夹,调用相关函数xxtea_encrypt进行加密,最后在文件开始位置,写上签名就可以了。我把相关操作封装成一个python文件。可以直接调用。
    import xxteaModule
    import os
    
    def ReadFile(filePath):
        file_object = open(filePath,'rb')
        all_the_text = file_object.read()
        file_object.close()
        return all_the_text
    
    def WriteFile(filePath,all_the_text):    
        file_object = open(filePath,'wb')    
        file_object.write(all_the_text)
        file_object.close()
        
    def BakFile(filePath,all_the_text):
        file_bak = filePath[:len(filePath)-3] + 'bak'   
        WriteFile(file_bak,all_the_text)
    
    
    
    def ListLua(path):
        fileList = [] 
        for root,dirs,files in os.walk(path):
           for eachfiles in files:
               if eachfiles[-4:] == '.lua' :               
                   fileList.append(root + '/' + eachfiles)
        return fileList
    
    def EncodeWithXxteaModule(filePath,key,signment):    
        all_the_text = ReadFile(filePath)    
    
        if all_the_text[:len(signment)] == signment :
            return
        #bak lua
        BakFile(filePath,all_the_text)
           
        encrypt = xxteaModule.encrypt(all_the_text,key)
        signment = signment + encrypt
        WriteFile(filePath,signment)    
        
    def EncodeLua(projectPath,key,signment):
        path = projectPath + '/src'
        fileList = ListLua(path)
        for files in fileList:
            EncodeWithXxteaModule(files,key,signment)
    
    def FixCpp(projectPath,key,signment):
        filePath = projectPath + '/frameworks/runtime-src/Classes/AppDelegate.cpp'
        all_the_text = ReadFile(filePath)
    
        #bak cpp
        BakFile(filePath,all_the_text)    
    
    
        pos = all_the_text.find('stack->setXXTEAKeyAndSign')
        left = all_the_text.find('(',pos)
        right = all_the_text.find(';',pos)   
    
        word = str.format('("%s", strlen("%s"), "%s", strlen("%s"))' % (key,key,signment,signment))
        
        all_the_text = all_the_text[:left] + word + all_the_text[right:-1]
        
        WriteFile(filePath,all_the_text) 
        
        
        
    projectPath = "D:/cocosIDEWork/aseGame/"
    key = "123"
    signment = "cloud"
    
    
    EncodeLua(projectPath,key,signment)
    FixCpp(projectPath,key,signment)
    print "encode ok"

    整个工程是用cocosIDE生成的。这个工具会自动加密src下的lua,并在AppDelegate.cpp中设置相应的密码与签名。xxTeaModule是对cocos2d-x\external\xxtea\xxtea.cpp的一个python封装。
    相关工具我已打包上传,见地址:http://download.csdn.net/detail/cloud95/7675821




    展开全文
  • cocos2dx lua触摸

    2018-07-11 10:39:21
    cocos2dx lua --触摸事件 local listener = cc.EventListenerTouchOneByOne:create(); listener:setSwallowTouches(true); listener:registerScriptHandler(handler(self, self.onTouchBegin), c...
  • cocos2dx lua invalid 'cobj' in function 'lua_cocos2dx‘ 躺坑 for 循环中保存了创建的 Node节点到 userdata 数据结构中 再次引用发现 一直报   LUA ERROR: [string ".\framework/cocos2dx/...
  • cocos2dx 3.16 lua 打包成apk环境win10cocos2dx 3.16 +luaapache-ant-1.10.8android-ndk-r21android-sdkpython2.7java 1.8.0_202在项目根目录执行cocos compile -p android --ap android-22C:/android-ndk-r21/build...
  • cocos2dx Lua 笔记

    2017-03-15 00:33:25
    好久没有写博客了 打算以后每天写一点 为爱好cocos2dx lua的爱好者贡献一点自己的绵薄之力 我使用的开发工具是vs2012 加lua插件这个网上很容易下载到 vs可以对lua进行调试并且有提示, 还有个小工具就是sublime ...
  • cocos2dx lua 热更新

    万次阅读 2014-07-23 15:58:37
    cocos2dx lua 热更新 最近研究cocos2dx +
  • 本人初学cocos2dx-lua,代码可能存在bug,仅供参考。游戏只使用了一个场景完成了整个游戏,小鸟的重力使用更新定时器update实现,点击时速度设为0,每一帧速度+1 目录结构 frameworks:框架,cocos2d-x引擎框架库...
  • Cocos2dx Lua开发环境搭建

    千次阅读 2018-03-19 09:56:36
    本文记录在 Windows 下搭建 cocos2dx lua 开发环境,还有调试设置。系统:Windows 7 64IDE:Mircrosoft Visual Studio 2013Cocos2dx:cocos2d-x-3.13.1VS插件:BabeLua3.2.2.0准备工作下载 cocos2dx 源码,并运行 ...
  • cocos2dx lua 反编译

    千次阅读 2019-01-30 17:05:26
    网上各种教程、各种工具用不了,才会有这个...知己知彼很重要,搜索“cocos2dx lua 加密”大概可以找到类似下面的代码。 bool AppDelegate::applicationDidFinishLaunching() { ... CCLuaStack *pS...
  • cocos2dx lua脱坑之旅

    2020-10-22 21:45:37
    md,写了两年lua脚本,现在找不到cocos2dx lua的工作了,赶紧学点Creator去混饭吃。 新人再苦再难也要去学 unity 和虚幻,千万别来cocos。 写点写了两年lua 的经验。
  • cocos2dx lua环境搭建及断点调试

    千次阅读 2017-07-01 21:58:41
    如何搭建cocos2dx lua环境  分类: cocos2dx Lua(3)  版权声明:本文为博主原创文章,未经博主允许不得转载。  这几天一直在试一些cocos2dx lua的开发环境,试过cocos code ide 1.2和cocos ...
  • cocos2dx lua 日志系统

    2019-04-11 20:16:49
    但是cocos2dx lua的代码日志是基于lua的print打印,只写在console中,不会长久保存。怎么办,那么我们来设计一个简单的日志系统,让日志保存下来。 话不多说,直接上代码:(添加了注释) local LogManager = ...
  • cocos2dx lua解析json

    2018-05-28 18:22:33
    cocos2dx lua解析jsonlua中的json解析相比c++的要简单点,lua中主要是通过table的格式,json中的json.lua有两个函数是我们需要用的,第一个叫做 encode,用于将一个数据编码成json格式,第二个是 decode,用于将json...
  • cocos2dx lua 监听模式 1.在控制系统中申请监听事件池的内存 self.listenEventList = {} 2.在监听事件池中使用Key-Value键值对数据结构存储 key中存储当前事件的名称 value中存储事件发生后会出发的函数列表 ...
  • cocos2dx lua项目发布到android平台
  • 本篇介绍如何在lua中使用cjson对数据进行json的encode与decode,首先简单介绍下cjson: Lua CJSON 是 Lua 语言...cocos2dx lua 3.10 默认目录中包含cjson文件(目录:/frameworks/cocos2d-x/external/lua),但是没

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,856
精华内容 1,142
热门标签
关键字:

cocos2dxlua