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

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

1.关于AppDelegate:

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

2.创建Scene和Layer的不同:

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手机上的menu及back键:

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.plist的fonts provided…中添加;

注意iOS和android的不同(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.5inch(0.66,3:2)、4inch(0.56,16:9)、ipad(0.75,4:3)、iphone5s(0.5633,1.775)、iphone6(1.778)

其他主要长宽比:3:2、4:3、5:3、9:5、16:10、16:9(注:有些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.framework、StoreKit.framework、AdSupport.framework、MessageUI.framework(最好是对比下其他成功项目,看看还缺什么包,补全。一般在“Link Binary With Libraries”中有22 个items,也可能会是21个items,依据情况而定)。

在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.h和AppController.cpp文件(注意:这两个文件里头,需要添加头文件,要添加相应路径)。

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

4、拷贝NativeBridge.h和NativeBridge.cpp文件,

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

1).添加NDK_ROOT,右键项目Properties—>C/C++ Build—>Environment—>Add,新建 name:NDK_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

Cocos2dx基础手册相关推荐

  1. PHP代码审计基础手册

    PHP代码审计基础手册 审计第一步 审计INI配置文件 审计SQL注入 审计XSS 审计CSRF 审计文件包含 审计文件读取(下载) 审计文件上传 审计文件删除 审计代码执行 审计命令执行 审计变量覆 ...

  2. Cocos2d-x 基础示例-精灵移动2

    Cocos2d-x 基础示例-精灵移动2 先推荐一下红哥的精灵教程 http://blog.csdn.net/honghaier/article/details/8117903 红哥里面使用的ccTo ...

  3. 【Cocos2d入门教程二】Cocos2d-x基础概念

    上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: 环境设定(帧率 初始化openG ...

  4. cocos2dx基础篇(24)——基本动画CCAnimation/CCAnimate

    [唠叨] 基本动画制作需要用到CCAnimation类,用于存储动画相关的信息.以及由CCActionInterval继承的CCAnimate动画动作. 还有一些在创建动画动作的过程中,可能会用到的一 ...

  5. 计算机联锁系统操作显示规范,计算机联锁系统系列操作基础手册.doc

    目 录 TOC \o "1-3" \h \z \u 一. 人-机界面 3 二. 屏幕显示之一 --站场图形部分 4 三. 屏幕显示之二--菜单选择部分 5 包含: 汉字提醒.按钮名 ...

  6. Cocos2d-x 基础元素

    看过本章,然后实践之后,应该会掌握以下的认识: 1.Cocos2d-x引擎的基本运转过程 2.Cocos2d-x引擎的一些初始设置 3.对导演及图层及现实对象的认识 4.如何定义自己的显示对象 1.引 ...

  7. cocos2dx基础篇(9)——触碰事件Touch

    [唠叨] cocos2dx游戏引擎的重点是在于移动设备的跨平台开发,而移动设备上的游戏大部分都是通过屏幕触碰来进行的.比如主菜单的按钮触碰,打飞机中飞机的触碰移动,都需要用到触碰操作.想一想之前讲的菜 ...

  8. cocos2dx基础篇(29)——屏幕适配

    [唠叨] 手机的屏幕大小千差万别,如现在流行的安卓手机屏幕大部分长宽比例为16:9.而iPhone 5S的长宽比例为71:40(接近16:9),也有预测说iPhone 6S的长宽比例也将会是主流的16 ...

  9. cocos2dx基础篇(2)——Win32移植到Android

    [安装工具] JDK Eclipse 或直接下一个 ADT集成开发工具 SDK NDK9r ADT CDT    安装方法自行百度. [正文]    1.由 Cocos2D-X 和 VS2010 环境 ...

  10. cocos2dx基础篇(26)——场景切换CCTransitionScene

    [唠叨] 游戏中两个场景的切换时经常要被用到的,cocos2dx引擎为我们提供了许多场景切换的动画,我感觉有些和PPT的切换很类似,所以感觉很熟悉.如:淡入淡出.翻页.跳入跳出等等. 本节要讲的场景切 ...

最新文章

  1. 韩梦飞沙-屏幕录像专家 win10 含注册机
  2. java jodd 框架中发送email
  3. 東方茸回廊 汉化补丁
  4. java项目端口号异常_Pyspark:异常:Java网关进程在向驱动程序发送其端口号之前退出...
  5. Java 递归解决 quot;仅仅能两数相乘的计算器计算x^yquot; 问题
  6. python往mysql存入数据_Python操作mysql之插入数据
  7. 关于DataGridView_DataError事件的问题
  8. Java后台调用Flex自定义类型 (Java和AS类型转换问题)
  9. 抽象工厂模块在开发中的应用
  10. elisa数据处理过程图解_ELISA原理示意图详解.ppt
  11. linux CentOS7 erlang安装
  12. Python中的图书管理系统
  13. MAC电脑配置环境变量
  14. STM32-ADC模数转换
  15. 数据分析师15-面试全流程
  16. Win10如何清除运行历史记录
  17. 您选择的不是数据库安装目录_您不是您的数据,但您的数据仍然是您
  18. oracle vm 鼠标切换,VirtualBox的Linux虚拟机文本模式和图形模式的切换问题
  19. 哈夫曼树【北邮机试】
  20. mysql修改索引语句_mysql——创建索引、修改索引、删除索引的命令语句

热门文章

  1. js java script MD5码的生成
  2. 品牌建设—长效且动态的关系管理进程:赫联电子亚太区
  3. GitHub下载提速
  4. 国美易卡取得长足发展,国美易卡NVIDIA深度学习
  5. 什么是顶级域名、地理域名和个性域名
  6. 截段八面体堆积 matlab,截角八面体可以充满空间
  7. 第1周练习 货币转换 I
  8. python画聚类树状图_如何在scipy/matplotlib中绘制和标注层次聚类树状图
  9. 【小程序】零基础微信小程序开发+实战项目
  10. 批量导出pdf 和导出图片