Cocos2dx基础手册

    14年毕业那会到念研究生前去公司写了快一年的cocos2dx,独自开发了三个半游戏(后续再慢慢补上来),算是进公司后从零起步的cocos2dx, c++以及mac开发,当时总结了一些cocos2dx的基本code,现在放上来一起share希望能有帮助。

Tips(字体:普通;字体:注意;字体:注释):

1.关于AppDelegate

         设置主分辨率、FPS和起始界面


2.创建SceneLayer的不同:

          1)static cocos2d::CCScene* scene()/static DrawLayer* create(故在init()中也有不同)

          2).h文件中末尾还要加CREATE_FUNC(…)

          3).跳转和出现:

                CCDirector::sharedDirector()->replaceScene(HelloWorld::scene1());

                YouLoseLayer *layer = YouLoseLayer::create();this->addChild(layer, 2);

                //回到上一层

                this->removeFromParent();

3.获取坐标系:

          CCSize visibleSize;

          CCPoint origin;

          visibleSize = CCDirector::sharedDirector()->getVisibleSize();

          origin = CCDirector::sharedDirector()->getVisibleOrigin();

4.精灵(图片):

          CCSprite pSprite = CCSprite::create("tittle.png");

          pSprite->setPosition(ccp(visibleSize.width/2.0f + origin.x, visibleSize.height/1.3f));

          this->addChild(pSprite, 1);


5.按钮:

          1).同时也自带了两图片切换功能

              void menuMusicCallback(CCObject* pSender);

 pMusicItem = CCMenuItemImage::create("soundoff.png","soundon.png",this,menu_selector(HelloWorld::menuMusicCallback));

              pMusicItem->setPosition(ccp(origin.x + visibleSize.width/1.2f ,origin.y + visibleSize.height/5.0f));

              CCMenu* pMenu = CCMenu::create(pMusicItem,NULL);

              pMenu->setPosition(CCPointZero);

              //设置优先级(与6相关)

              pMenu->setTouchPriority(kCCMenuHandlerPriority);

              this->addChild(pMenu, 1);

          2).用精灵来做图片,在CCTouchBegan中画区域并写相关功能


6.触摸:

          bool ccTouchBegan(CCTouch* touch, CCEvent * pevent);

          void ccTouchEnded(CCTouch* touch, CCEvent* event);

          setTouchEnabled(true);

          setTouchMode(kCCTouchesOneByOne);

          void registerWithTouchDispatcher();

          //kCCMenuHandlerPriority=-128,将这个值设置为-128的二倍,可以比下边的层的优先级高;而且ccTouchBegan的返回值为true,说明其他的层将接受不到这个触摸消息了,只有这个层上边的菜单的优先级比他还要大,所以它上边的菜单是可以接收到触摸消息的

          void HelloWorld::registerWithTouchDispatcher(){

                CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority*2, false);

          }


7.android手机上的menuback键:

          setKeypadEnabled(true);

          virtual void keyBackClicked();

          void HelloWorld::keyBackClicked(){CCDirector::sharedDirector()->replaceScene(QuitGameLayer::scene());}


8.声音:

          //加载下一场景音效

         CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("sound/button.mp3");

          //播放

         CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("sound/button.mp3");


9.有时差的跳转:

          scheduleOnce(schedule_selector(P1WinLayer::retryCallback), 0.2f);


10.使用字体:

          首先要在info.plistfonts provided…中添加;

          注意iOSandroid的不同(iOS要现在字体册中找到他真正的名字):

          #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

              const char *FONT_NAME = "Tahoma";

          #else

              const char *FONT_NAME = "fonts/tahomabd.ttf";

          #endif

11.本地存储:

          CCUserDefault::sharedUserDefault()->setIntegerForKey("Bg", bg);

          CCUserDefault::sharedUserDefault()->flush();

          bg = CCUserDefault::sharedUserDefault()->getIntegerForKey("Bg");

12.打印信息分类:

          CCLog("----- gametest ----- %f, %f",visibleSize.width,visibleSize.height);

13.使用标签显示文字:

              CCLabelTTF* pLabel = CCLabelTTF::create("Easy", FONT_NAME, 24);

       pLabel->setPosition(ccp(visibleSize.width/2 + origin.x - pSprite->getContentSize().width/2.5f, visibleSize.height/2.15f + pSprite->getContentSize().height/2.2f));

              this->addChild(pLabel, 1);


14:关于普通格式到CCString的转换:

          CCString* dtotal=CCString::createWithFormat("%d",edraw+mdraw+hdraw);

          CCString* pppercent1=CCString::createWithFormat("%.0f",ppercent1);

          eewin->getCString()方可在CCLabel中显示


15.关于调节精灵大小:

          rate->setScale(1.0f);


16.关于移除精灵:

          sprite->setTag(22+col);

          removeChildByTag(22);

17.关于精灵图片做动作(组合):

          CCMoveTo *move = CCMoveTo::create(0.3f, ccp(mapW[22+col],mapH[22+col]));

          CCJumpTo *move2=CCJumpTo::create(0.3f, ccp(0,0), sprite->getContentSize().height/2, 1);

          //反弹效果

          CCActionInterval* actionByBack=move2->reverse();

          sprite->runAction(CCSequence::create(move,actionByBack,NULL));


18.获取触摸点:

          CCPoint location = touch->getLocationInView();

          location =CCDirector::sharedDirector()->convertToGL(location);

19.使弹出框背景灰暗:再加一层精灵

          bg = CCLayerColor::create(ccc4(100, 100, 100, 150(透明度)));

          addChild(bg,1);

20.关于精灵的批处理:

         _batch = CCSpriteBatchNode::create("ball1.png");

         addChild(_batch);


         CCSprite* sprite = CCSprite::createWithTexture(_batch->getTexture());

        _batch->addChild(sprite);

21.关于分辨率适配的问题:

              g_fScreenSwitch=CCDirector::sharedDirector()->getVisibleSize().width/CCDirector::sharedDirector()->getVisibleSize().height;

         关于IOS设备:3.5inch0.6632)、4inch0.56169)、ipad0.7543)、iphone5s0.56331.775)、iphone61.778

             其他主要长宽比:324353951610169(注:有些android手机上写的分辨率是伪分辨率)


22.给app添加广告(Google Ads):

         1.导入“flurry Admob Chartboost”

         IOS中添加Chartboost

     1.拷贝libChartboost.a Chartboost.h  到目录proj.ios

              2.Xcode "ios"目录 右键点击Add Files to "  " 添加上述两文件

              3.Build Settings -> Search Paths -> Library Search Paths前三项改为:

                        "$(SRCROOT)/../../../external/libwebsockets/ios/lib"

                "$(SRCROOT)/../../../cocos2dx/platform/third_party/ios/libraries"

                "$(SRCROOT)"

 4).Build Phase -> Link Binary With Libraries 中添加SystemConfiguration.frameworkStoreKit.frameworkAdSupport.frameworkMessageUI.framework(最好是对比下其他成功项目,看看还缺什么包,补全。一般在“Link Binary With Libraries”中有22 items,也可能会是21items,依据情况而定)。

         IOS中添加Flurry

               1.拷贝libFlurry_4.3.0.a Flurry.h  到目录proj.ios

       2.Xcode "ios"目录 右键点击Add Files to "  " 添加上述两文件

          IOS中添加Admob

                Add StoreKit, MessageUI and AdSupport to both target

       Go to Project settings > Build Settings >Linking.  And set -ObjC in Other Linker Flags.


         2、根据参考项目修改AppController.hAppController.cpp文件(注意:这两个文件里头,需要添加头文件,要添加相应路径)。


         3、在ios文件夹下新建Obejective-C class文件,命名:IOSPlatformCallback,得到IOSPlatformCallback.hIOSPlatformCallback.m两个文件,根据参考项目修改这两个文件。


         4、拷贝NativeBridge.hNativeBridge.cpp文件,

          将项目导入Eclipse中(没来香港之前用的还是eclipse+ADT开发的android):

              1).添加NDK_ROOT,右键项目Properties—>C/C++ Build—>Environment—>Add,新建 nameNDK_ROOT,value:NDK所在的绝对路径。

             2).将目标项目导入Eclipse后,再将 google-play-services_lib 导入到Eclipse中,该项目不是一个Android项目,所以不要将导成Android项目,而应该是General->Existing Projects Into Workspace

              3).右击项目,选择Properties—>Android—>Library—>Add-google—>play-services_lib确定。

              4). 参照参考项目,在项目的src目录下添加GameHelper.java文件

              5). Manifest文件中添加相应服务和权限参照参考项目,并在application节点中添加如下节点:

          <meta-data  android:name="com.google.android.gms.games.APP_ID"  android:value="@string/app_id" />

              6). 在主activity中添加所需代码(参考成功项目),在添加代码过程中,注意activity中有一个静态方法,括号中的参数名应该与jni目录下的Android.mk中的“LOCAL_MODULE:= ”后面的_shared之前的字符串相同

          static {System.loadLibrary("cocos2dcpp"); }

               7).res—>values目录下修改strings.xml文件(参照参考项目)和添加新建ids.xml文件(直接粘贴过来即可)。


23.广告升级android Chartboost(替换lib并参考):

          主要修改的func:

             1. addChartboostAds()

             2.onStart()

             3.onResume()

             4.onKeyDown()

             5.onPause()

             6.onStop()

             7.onDestory()

             8.onBackPressed

             9.onMoreclicked()

             10.showInterstitial()



附录:

        1.mac上使用终端创建项目:

                 cd Documents/cocos2dx2.2.3/tools/project-creator

                 Cocos2dx2.X.X—./create_project.py -project HelloWorld -package com.coolgames.Helloworld -language cpp

                 Cocos2dx3.X.X—python create_project.py…


        2.当手机app挂掉后再连电脑,通过终端查看错误信息:

                 adb logcat | grep E/


        3.错误集锦:

                 EXC_BAD_ACCESS之类的可以看看精灵是不是为null,説明图片未载入;

                 Linker command failed with exit code1(有文件相同,确认粘贴过来的代码中class头换了吗)

                 ld:library not found for -l(添加广告时,lib的添加有问题,如cocos2dx.a是否存在)

                 退出游戏时报错(都和内存有关):

                     Fatal signal 11(SIGSEGV);

                     invalid heap address in dlfree;



版权声明:本文为博主原创文章,转载必注明http://blog.csdn.net/u011394069/article/details/79386052

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值