<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                本站文章均為[?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明: 轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/iphone-cocos2dx/699.html](http://www.himigame.com/iphone-cocos2dx/699.html "【iOS-cocos2d-X") [? 點擊訂閱 ?](http://list.qq.com/cgi-bin/qf_invite?id=acfc24e272cc4a26debf3b3866edb626a9ea3fc80fd8893c)?本博客最新動態!及時將最新博文通知您! 這里Himi又來了一篇基礎篇…..不是因為充博文數量,而是Cocos2dX一個超級群里不少童鞋都有問過很基礎的問題,Himi估計這些童鞋要么之前對C++不熟悉,要么就是之前沒有接觸過Cocos2d,而直接轉入了Cocos2dx的開發行列中仂,這里首先給這些童鞋三個建議: 1.Cocos2dx的教程確實不多,但是因為Cocos2dx是Cocos2d一個繁衍的引擎,基本API沒有大的變化,你只要將Cocos2d熟悉仂,那么X對你來說不會難的…. 2.還是再次提醒大家多看看引擎自帶的例子,對于很多基礎問題,源碼完全能照顧到的,不管是cocos2d的,還是cocos2dX的,但是如果你還不知道Cocos2d/X的引擎示例在哪….無語下…(在引擎包下哦) 3.還有不少童鞋抱著“趕快做完這個功能”的態度來工作來求助。。。這樣不好的說,學開發跟學習一樣,不思考就來答案的東西真的是浮云。。。建議大家遇到瓶頸的時候考慮下吧,禁忌飯來張口的童鞋; 入正題,開頭就說仂本篇主要為了照顧下基礎的童鞋,但是本篇也會介紹些在cocos2dx引擎中一些自定義類的模版的創建和使用;介紹過程中順便把基礎也說下,這樣一舉兩得; 首先我們先看一個自定義精靈類如何來做:(先上代碼,然后細說) ~~~ 自定義精靈模版: SpriteClassModel.h // // SpriteClassModel.h // Oh!MonsterMR // // Created by Himi on 12-3-7. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #ifndef Oh_MonsterMR_SpriteClassModel_h #define Oh_MonsterMR_SpriteClassModel_h #include "cocos2d.h" using namespace cocos2d; class SpriteClassModel : public cocos2d::CCSprite ,public CCTouchDelegate { public: static SpriteClassModel* spriteModelWithFile(const char *spName); //靜態創建(內存自動釋放) void myInit();//自定義初始化函數 virtual ~SpriteClassModel(); //重寫觸屏相關函數---- virtual void onEnter(); virtual void onExit(); virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event); virtual void ccTouchMoved(CCTouch* touch, CCEvent* event); virtual void ccTouchEnded(CCTouch* touch, CCEvent* event); }; #endif ~~~ ~~~ SpriteClassModel.cpp // // SpriteClassModel.cpp // Oh!MonsterMR // // Created by Himi on 12-3-7. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #include "SpriteClassModel.h" using namespace cocos2d; SpriteClassModel* SpriteClassModel::spriteModelWithFile(const char *spName) { SpriteClassModel *pobSprite = new SpriteClassModel(); if (pobSprite && pobSprite->initWithFile(spName))//備注1 { pobSprite->myInit(); pobSprite->autorelease(); return pobSprite; } CC_SAFE_DELETE(pobSprite); return NULL; } void SpriteClassModel::myInit(){ CCLOG("----測試init函數"); } //---SpriteClassModel 按鍵----------------- // 別忘記加入 TouchDispatcher ,TouchDispatcher一般放在onenter 綁定,onexit 刪除 bool SpriteClassModel::ccTouchBegan(CCTouch* touch, CCEvent* event) { CCLog("%s","精靈111~ccTouchBegan"); return true; } void SpriteClassModel::ccTouchMoved(CCTouch* touch, CCEvent* event) { //獲取當前用戶觸屏點坐標并將3d坐標映射2d坐標系 CCPoint touchPoint = touch->locationInView( touch->view() ); touchPoint = CCDirector::sharedDirector()->convertToGL( touchPoint ); //touchPoint.x, getPosition().y if(touchPoint.x> CCDirector::sharedDirector()->getWinSize().width/2){ CCLog("%s","精靈22~~ccTouchMoved"); } } void SpriteClassModel::ccTouchEnded(CCTouch* touch, CCEvent* event) { CCLog("%s","精靈33~~~ccTouchEnded"); } //---SpriteClassModel 起始結束的生命周期函數---- void SpriteClassModel::onEnter() { //注冊監聽 1.dele類,2.優先級,3.YES為阻礙其他類的move 和 end CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true); CCSprite::onEnter(); } void SpriteClassModel::onExit() { //移除監聽 CCTouchDispatcher::sharedDispatcher()->removeDelegate(this); CCSprite::onExit(); } SpriteClassModel::~SpriteClassModel(){ CCLOG("---析構函數"); } ~~~ 這個自定義精靈類的模版重點介紹3個點: 1.構造函數; static SpriteClassModel* spriteModelWithFile(const char *spName); 此構造函數的實現機制,Himi仿制Cocos2dX引擎來做的,一方面使用方便,另外一方面內存自動釋放; 2.在構造函數中,有個備注1,還沒有看到的童鞋請回頭看下,這里我使用的父類CCSprite的索引文件名的創建方式,如下: initWithFile(<#const char *pszFilename#>); 那么這里可以根據需要繼續自定義使用父類的索引幀緩存文件名的方式,如下: initWithSpriteFrameName(<#const char *pszSpriteFrameName#>); 當然仂為了方便大家可以在自定義中多寫幾種構造,留好接口使用即可,那么這里Himi還自定義仂一個myInit()的函數,這個函數主要用途兩點:1.用以清晰化操作,代碼易讀 2.當此類多種構造函數并在的時候可以將此自定義精靈類的獨有屬性設置等都放入此函數中,代碼復用; 3.關于觸屏方面的,代碼都有注釋,不多說,唯一要提醒大家的就是當前Himi的這個精靈是采用觸屏事件分發的機制進行處理的,而不是直接開啟觸屏開關(此方法太過于局限),那么如果對于這兩種不太熟悉的童鞋請移步到如下文章:(cocos2d與cocos2dx類似) 【iOS-Cocos2d游戲開發之五】多觸點與觸屏事件詳解(單一監聽、事件分發) 關于CCNode的自定義這個不多說仂,類似自定義精靈只是繼承父類有所變化,模版如下: ~~~ NodeClassModel.h // // NodeClassModel.h // Oh!MonsterMR // // Created by Himi on 12-3-7. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #ifndef Oh_MonsterMR_NodeClassModel_h #define Oh_MonsterMR_NodeClassModel_h #include "cocos2d.h" class NodeClassModel : public cocos2d::CCNode { public: static NodeClassModel* NodeModelWithInit(); void myInit(); virtual ~NodeClassModel(); }; #endif ~~~ ~~~ NodeClassModel.cpp // // NodeClassModel.cpp // Oh!MonsterMR // // Created by Himi on 12-3-7. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #include "NodeClassModel.h" using namespace cocos2d; NodeClassModel* NodeClassModel::NodeModelWithInit() { NodeClassModel *mynode = new NodeClassModel(); if (mynode) { mynode->myInit(); mynode->autorelease(); return mynode; } CC_SAFE_DELETE(mynode); return NULL; } void NodeClassModel::myInit(){ CCLOG("----測試init函數"); } NodeClassModel::~NodeClassModel(){ CCLOG("---析構函數"); ~~~ 下面介紹下自定義CCLayer的模版:(先上代碼,后剖析) ~~~ LayerClassModel.h // // LayerClassModel.h // Oh!MonsterMR // // Created by Himi on 12-3-7. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #ifndef Oh_MonsterMR_LayerClassModel_h #define Oh_MonsterMR_LayerClassModel_h #include "cocos2d.h" using namespace cocos2d; class LayerClassModel : public cocos2d::CCLayer { public: static LayerClassModel*sharedLayerClassModel(void); virtual bool init(); static cocos2d::CCScene* scene(); virtual ~LayerClassModel(); LAYER_NODE_FUNC(LayerClassModel);//用于允許CCScene::node(); }; #endif ~~~ ~~~ // // LayerClassModel.cpp // Oh!MonsterMR // // Created by Himi on 12-3-7. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #include "LayerClassModel.h" using namespace cocos2d; static LayerClassModel* shredStatic;//備注1 static bool s_bFirstRun = true;//備注2 LayerClassModel* LayerClassModel::sharedLayerClassModel(void) { if (s_bFirstRun)//備注3 { s_bFirstRun=false; } return shredStatic; } CCScene* LayerClassModel::scene() { // 'scene'自動釋放內存 CCScene *scene = CCScene::node(); // 'layer' 自動釋放內存 LayerClassModel *layer = LayerClassModel::node(); scene->addChild(layer); return scene; } bool LayerClassModel::init(){ if ( !CCLayer::init() ) { return false; } shredStatic=this; //初始化數據 return true; } LayerClassModel::~LayerClassModel(){ CCLOG("---析構函數"); } ~~~ 關于自定義CCLayer模版中,我這里將觸屏相關代碼刪除了,與自定義精靈的觸屏實現一樣沒區別; 重點介紹3點: 1.CCLayer和CCScene 兩個類都是自動釋放內存,這個提示在創建cocos2dx引擎模版默認HelloWorldScene類中已經有提示,可能大家沒有注意到,所以這里強調下; 2.CCLayer 經常會用于整個大的UI設計或者游戲中,他都作為主要的父類來使用,將游戲元素CCSprite,CCMenu,粒子等都添加到Layer中,所以此類在游戲中的交互性應該最強,所以在LayerClassModel模版中我添加了一個靜態函數用于方便訪問和其他類進行數據交互用(備注1),如下函數: static LayerClassModel*sharedLayerClassModel(void); 好處不用多說,如CCDirector一樣使用,如:CCDirector::sharedDirector()->getWinSize(); 3.備注2和備注3的作用防止當前類被重復創建,這個提醒下,不多介紹仂; 自定義的靜態類與將CCLayer靜態出來的方式類似,只是一個繼承CCLayer一個不需要繼承任何父類,模版如下: ~~~ StaticClassModel.h // // StaticClassModel.h // Oh!MonsterMR // // Created by Himi on 12-3-8. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #ifndef Oh_MonsterMR_StaticClassModel_h #define Oh_MonsterMR_StaticClassModel_h #include "cocos2d.h" class StaticClassModel { public: static StaticClassModel* sharedStaticClassModel(void); void myInit(); virtual ~StaticClassModel(); // void testFun(); }; #endif StaticClassModel.cpp // // StaticClassModel.cpp // Oh!MonsterMR // // Created by Himi on 12-3-8. // Copyright (c) 2012年 Augustimpression. All rights reserved. // #include "StaticClassModel.h" using namespace cocos2d; static StaticClassModel shredStatic; static bool s_bFirstRun = true; StaticClassModel* StaticClassModel::sharedStaticClassModel(void) { if (s_bFirstRun) { shredStatic.myInit(); s_bFirstRun=false; } return &shredStatic; } void StaticClassModel::myInit(){ 1 shredStatic=this; CCLOG("----測試Static init函數"); } void StaticClassModel::testFun(){ CCLOG("-測試fstatic fun-"); } StaticClassModel::~StaticClassModel(){ CCLOG("---析構函數"); } ~~~ 基本代碼都該有的注釋都已經寫仂,很容易理解,本篇供Cocos2dx的新童鞋一個參考吧??
                  <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>

                              哎呀哎呀视频在线观看