Cocos2dx基础手册
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基础手册相关推荐
- PHP代码审计基础手册
PHP代码审计基础手册 审计第一步 审计INI配置文件 审计SQL注入 审计XSS 审计CSRF 审计文件包含 审计文件读取(下载) 审计文件上传 审计文件删除 审计代码执行 审计命令执行 审计变量覆 ...
- Cocos2d-x 基础示例-精灵移动2
Cocos2d-x 基础示例-精灵移动2 先推荐一下红哥的精灵教程 http://blog.csdn.net/honghaier/article/details/8117903 红哥里面使用的ccTo ...
- 【Cocos2d入门教程二】Cocos2d-x基础概念
上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: 环境设定(帧率 初始化openG ...
- cocos2dx基础篇(24)——基本动画CCAnimation/CCAnimate
[唠叨] 基本动画制作需要用到CCAnimation类,用于存储动画相关的信息.以及由CCActionInterval继承的CCAnimate动画动作. 还有一些在创建动画动作的过程中,可能会用到的一 ...
- 计算机联锁系统操作显示规范,计算机联锁系统系列操作基础手册.doc
目 录 TOC \o "1-3" \h \z \u 一. 人-机界面 3 二. 屏幕显示之一 --站场图形部分 4 三. 屏幕显示之二--菜单选择部分 5 包含: 汉字提醒.按钮名 ...
- Cocos2d-x 基础元素
看过本章,然后实践之后,应该会掌握以下的认识: 1.Cocos2d-x引擎的基本运转过程 2.Cocos2d-x引擎的一些初始设置 3.对导演及图层及现实对象的认识 4.如何定义自己的显示对象 1.引 ...
- cocos2dx基础篇(9)——触碰事件Touch
[唠叨] cocos2dx游戏引擎的重点是在于移动设备的跨平台开发,而移动设备上的游戏大部分都是通过屏幕触碰来进行的.比如主菜单的按钮触碰,打飞机中飞机的触碰移动,都需要用到触碰操作.想一想之前讲的菜 ...
- cocos2dx基础篇(29)——屏幕适配
[唠叨] 手机的屏幕大小千差万别,如现在流行的安卓手机屏幕大部分长宽比例为16:9.而iPhone 5S的长宽比例为71:40(接近16:9),也有预测说iPhone 6S的长宽比例也将会是主流的16 ...
- cocos2dx基础篇(2)——Win32移植到Android
[安装工具] JDK Eclipse 或直接下一个 ADT集成开发工具 SDK NDK9r ADT CDT 安装方法自行百度. [正文] 1.由 Cocos2D-X 和 VS2010 环境 ...
- cocos2dx基础篇(26)——场景切换CCTransitionScene
[唠叨] 游戏中两个场景的切换时经常要被用到的,cocos2dx引擎为我们提供了许多场景切换的动画,我感觉有些和PPT的切换很类似,所以感觉很熟悉.如:淡入淡出.翻页.跳入跳出等等. 本节要讲的场景切 ...
最新文章
- 韩梦飞沙-屏幕录像专家 win10 含注册机
- java jodd 框架中发送email
- 東方茸回廊 汉化补丁
- java项目端口号异常_Pyspark:异常:Java网关进程在向驱动程序发送其端口号之前退出...
- Java 递归解决 quot;仅仅能两数相乘的计算器计算x^yquot; 问题
- python往mysql存入数据_Python操作mysql之插入数据
- 关于DataGridView_DataError事件的问题
- Java后台调用Flex自定义类型 (Java和AS类型转换问题)
- 抽象工厂模块在开发中的应用
- elisa数据处理过程图解_ELISA原理示意图详解.ppt
- linux CentOS7 erlang安装
- Python中的图书管理系统
- MAC电脑配置环境变量
- STM32-ADC模数转换
- 数据分析师15-面试全流程
- Win10如何清除运行历史记录
- 您选择的不是数据库安装目录_您不是您的数据,但您的数据仍然是您
- oracle vm 鼠标切换,VirtualBox的Linux虚拟机文本模式和图形模式的切换问题
- 哈夫曼树【北邮机试】
- mysql修改索引语句_mysql——创建索引、修改索引、删除索引的命令语句