<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                本站文章均為[?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明: 轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/lua-2/985.html](http://www.himigame.com/lua-2/985.html "【Cocos2dX(2.x)_Lua開發之一】★重要必看篇★在Lua中使用自定義精靈(Lua腳本與自創建類之間的訪問)及Lua基礎講解") [? 點擊訂閱 ?](http://list.qq.com/cgi-bin/qf_invite?id=acfc24e272cc4a26debf3b3866edb626a9ea3fc80fd8893c)?本博客最新動態!及時將最新博文通知您! 本篇做起來比較累,大家請參考最新篇[【COCOS2DX-LUA 腳本開發之四】使用tolua++編譯pkg,從而創建自定義類讓Lua腳本使用](http://www.himigame.com/lua1/1259.html) 此篇可能會在最新的cocos2dx版本中出現如下問題: ~~~ LUA ERROR: ...24F82-1230-41FE-8A04-C445FB7D1BAB/mtet.app/hello.lua:35: error in function 'addChild'. argument #2 is 'MySprite'; 'CCNode' expected. ~~~ 最近Himi都沒有更新博文了,其實也是猶豫寫本cocos2d(x)引擎書籍在做準備,目錄的草稿都寫好了,目錄中包含的大家最感興趣的cocos2d/x動作編輯器的詳細制作流程與源碼! 但是遺憾的是Himi還是騰不出時間去寫; 放棄去寫的另外一個原因就是因為支持我的童鞋門,在7月份就說過要為大家奉上關于cocos2dx-lua的系列教程,但是一直由于時間等問題一再拖到現在,如果Himi真要準備寫書估計半年內都基本很難有時間更新博客的,當然也考慮到公司項目,最終放棄;(暫時放棄,以后有可能的話還是會寫的 )![](image/56fcaa6a58e7f.gif) 順便說一句,關于Himi9個技術群,不論是cocos2d-iphone、cocos2dx、android還是以后陸續公布的Unity3D群,周期性的Himi和管理員們會定期清理(一切都是為了更多想學習的新童鞋考慮),希望大家進群冒泡,積極討論。好了,廢話就不多說了,從今天開始Himi為童鞋們出cocos2dx-lua的系列開發教程,希望大家還一如既往得支持;3Q? Himi 當前開發工具等版本如下: mac: 10.8 ??? ?xcode:4.4.1 ? ? ? cocos2dx :cocos2d-2.0-rc2-x-2.0.1 本篇介紹兩個知識點:? 1\. Lua基礎 2.在lua腳本中使用我們自定義的精靈類 ### 一:lua基礎 關于Lua的其實很早前Himi寫過一篇關于cocos2dx-Lua 的基礎博文了,但是是cocos2dx 1.x版本的,對于不是很熟悉的童鞋,Himi還是建議去看一看,連接:[【iOS-cocos2d-X 游戲開發之八】在Cocos2dX游戲中使用Lua腳本進行游戲開發(基礎篇)并介紹腳本在游戲中詳細用途!](http://www.himigame.com/iphone-cocos2dx/681.html)?Himi以后更新的Lua系列都是基于Cocos2dx 2.x版本的了。 ###二:在lua腳本中使用我們自定義的精靈類 首先創建cocos2dx-lua項目,然后在項目中添加我們的自定義精靈類:這里Himi類名為:HSprite HSprite.h: ~~~ // // HSprite.h // cocos2dx_lua_tests_by_Himi // // Created by Himi on 12-8-30. // // #ifndef cocos2dx_lua_tests_by_Himi_HSprite_h #define cocos2dx_lua_tests_by_Himi_HSprite_h #include "cocos2d.h" using namespace cocos2d; class HSprite : public cocos2d::CCSprite{ public: static HSprite* createHSprite(const char* _name); void hspriteInit(); }; #endif ~~~ HSprite.cpp: ~~~ // // HSprite.cpp // cocos2dx_lua_tests_by_Himi // // Created by Himi on 12-8-30. // // #import "HSprite.h" HSprite* HSprite::createHSprite(const char* _name){ HSprite* sp = new HSprite(); if(sp && sp->initWithFile(_name)){ sp->hspriteInit(); sp->autorelease(); return sp; } CC_SAFE_DELETE(sp); return NULL; } void HSprite::hspriteInit(){ CCMessageBox("create HSprite success", "Himi_Lua"); } ~~~ 以上代碼不做解釋了,很簡單,繼承CCSprite,添加一個自動釋放的創建函數(createHSprite)以及一個自定義初始化函數(hspriteInit) 下面我們打開LuaCocos2d.cpp 類,這個類在項目的 libs/lua/cocos2dx_support目錄下,如下圖: ![](https://box.kancloud.cn/2016-03-31_56fcd0275416b.png) 然后開始添加我們自定義精靈類,讓Lua腳本能認識它; 步驟分為3步: 1\. 注冊我們的自定義類: 在LuaCocos2d.cpp類中搜索“tolua_reg_types”這個函數,然后在其中進行注冊: ~~~ tolua_usertype(tolua_S,"HSprite"); ~~~ 如下圖所示: ![](https://box.kancloud.cn/2016-03-31_56fcd0276f911.png) 第二步:聲明我們自定義類的函數: 搜索“tolua_Cocos2d_open”這個函數,然后在其中添加如下代碼: ~~~ tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL); tolua_beginmodule(tolua_S,"HSprite"); tolua_function(tolua_S,"createHSprite",tolua_Himi_HSprite_createHSrpite00); tolua_endmodule(tolua_S); ~~~ 如下圖: ![](https://box.kancloud.cn/2016-03-31_56fcd0279f71b.png) 這里開始解釋: 首先定義能讓腳本認識的類函數,遵循如下: a) ?tolua_cclass(tolua_S, “HSprite”, “HSprite”, “CCSprite”, NULL); tolua_cclass聲明哪個類函數,第一個狀態值默認:tolua_S 后兩個參數:是自定義類類名 再往后是繼承的父類類名 b)添加參數開始聲明: tolua_beginmodule(tolua_S,”HSprite”); c) ?添加自定類函數: tolua_function(tolua_S,”createHSprite”,tolua_Himi_HSprite_createHSrpite00); 第一個參數默認,第二個參數自定義類名,第三個:實現腳本與自定義類之間的轉換實現函數 注意,這里有多個函數,可以繼續寫; d) 結束自定義函數: tolua_endmodule(tolua_S); 第三步:實現我們的腳本之間轉換函數 ?tolua_Himi_HSprite_createHSrpite00 實現如下: ~~~ /* method: create of class HSprite */ #ifndef TOLUA_DISABLE_tolua_Himi_HSprite_createHSrpite00 static int tolua_Himi_HSprite_createHSrpite00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertable(tolua_S,1,"HSprite",0,&tolua_err) || !tolua_isstring(tolua_S,2,0,&tolua_err) || !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif { const char* pszFileName = ((const char*) tolua_tostring(tolua_S,2,0)); { HSprite* tolua_ret = (HSprite*) HSprite::createHSprite(pszFileName); int nID = (tolua_ret) ? tolua_ret->m_uID : -1; int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL; tolua_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"HSprite"); } } return 1; #ifndef TOLUA_RELEASE tolua_lerror: tolua_error(tolua_S,"#ferror in function 'create'.",&tolua_err); return 0; #endif } #endif //#ifndef TOLUA_DISABLE ~~~ 如下圖所示: [![](https://box.kancloud.cn/2016-03-31_56fcd027c5e60.jpg)](http://www.himigame.com/wp-content/uploads/2012/08/32.jpg) 這里Himi解釋下: 童鞋們可以從第 384行的 #endif 把這個實現函數分為兩部分來看, 首先是375~384之間的代碼: ~~~ #ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertable(tolua_S,1,"HSprite",0,&tolua_err) || !tolua_isstring(tolua_S,2,0,&tolua_err) || !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif ~~~ 這里是對參數類型的判斷: tolua_isusertable ?是否為”第三個參數”自定義類型 tolua_isstring ?是否為字符串類型 tolua_isnoobj ?結束(沒有參數的判斷) 然后是386~392之間的代碼段: ~~~ const char* pszFileName = ((const char*) tolua_tostring(tolua_S,2,0)); { HSprite* tolua_ret = (HSprite*) HSprite::createHSprite(pszFileName); int nID = (tolua_ret) ? tolua_ret->m_uID : -1; int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL; tolua_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"HSprite"); } ~~~ 這里是對腳本代碼的解析從而調用的自定義創建的函數 最后我們修改 ?hello2.lua ?腳本中的代碼:(創建cocos2dx-lua項目默認Resources下自帶的文件) 在腳本最后”– run”下代碼修改如下: ~~~ -- run local sceneGame = CCScene:create() -- sceneGame:addChild(createLayerFram()) -- sceneGame:addChild(createLayerMenu()) sceneGame:addChild(createHimiLayer()) CCDirector:sharedDirector():runWithScene(sceneGame) ~~~ 這里Himi注視了另個layer的添加,添加了自己的Layer ~~~ sceneGame:addChild(createHimiLayer()) ~~~ 然后將Himi自定義方法添加在腳本中,代碼如下: ~~~ local function createHimiLayer() local layerH = CCLayer:create() local _font = CCLabelTTF:create("Himi_(cocos2dx-Lua)教程","Arial",33) _font:setPosition(230,280) layerH:addChild(_font) --創建自定義類型精靈 local hsprite = HSprite:createHSprite("himi.png") hsprite:setPosition(100,100) hsprite:setScale(1.5) hsprite:setRotation(45) layerH:addChild(hsprite) return layerH end ~~~ 創建自己定義的精靈,然后進行調用縮放,旋轉,設置坐標函數。 ok,運行后的接圖如下: ![](https://box.kancloud.cn/2016-03-31_56fcd027ec0e1.png) 好了,本篇就到這里,童鞋們感覺本站好的文章記得分享,轉播散播哦
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看