CocosX学习实录02——第5章 CCLayer子类的一般写法,obj-C改C++,
来源:互联网 发布:淘宝下架立刻就上架吗 编辑:程序博客网 时间:2024/06/06 05:02
本文按时间倒序
前言
找死!《ios5 cocos2d游戏开发实战(第2版)》是objC写的,
项目用C++,肿么办?
老师说,改!那就改呗!
第5章 主要讲CCLayer的使用。
头文件部分
创建后的代码只有一点,大部分要自己写!
鲁迅说,为了忘却的纪念。
我们来纪念一下。
生成代码如下:
#ifndef __MyScenes04__GameLayer__#define __MyScenes04__GameLayer__#include <iostream>#endif /* defined(__MyScenes04__GameLayer__) */
通常插入
#ifndef __MyScenes04__GameLayer__#define __MyScenes04__GameLayer__#include <iostream>#include "cocos2d.h"USING_NS_CC;class GameLayer :public CCLaye{public: GameLayer();//构造函数 ~GameLayer();//销毁方法,相当于dealloc CREATE_FUNC(GameLayer);//这样层子类就默认有create方法了 virtual bool init();//实例方法,init,和objC不同,返回布尔值, static CCScene *scene();//静态方法,对应的场景,场景是层的父容器 CCPoint gameLayerPosition; CCPoint lastTouchLocation;};#endif /* defined(__MyScenes04__GameLayer__) */
多些废话,多些沟通
1)为什么要有scene静态方法呢?因为一个层正好对应一个场景嘛,场景加层,是层的父。添加场景,不是添加层,是添加层的父。有点像objC里面的控制器和View吧。为什么不继承自Scence呢?不知道。
2)注意,一旦 virtual bool init(); 必须按照上面结构返回bool,如果弄反了会报错。
接下来,一个个看实现。
cpp文件部分
方法惯例
1) C++的所有方法实现部分,都要加命名空间::fun
2)使用命名空间,using namespace cocos2d; 不然要敲全称,谁傻啊。
实例方法init
1) init的返回值不同:
objC是类实例自身(层
-(id) init.....return self;bool FirstScene::init().....return true或者false
返回布尔值,最简是
bool BuildingController::init(){ if (!CCLayer::init()) { return false; } return true;}
2) 生成方法不同:
objC是self初始化,C++写成父类的同名方法,实例的父类是层,所以写成CCLayer->init(),不是CCScene->create()方法。
if ((self = [super init])) if (CCLayer::init()) {CCLayer的原文件是,C++的布尔含义,理解成是否创建了,当没有时,创建,返回true, 没有创建时,返回false。
bool CCLayer::init(){ bool bRet = false; do { ....... // success bRet = true; } while(0); return bRet;}3) 设置点击:C++是方法,用前缀set,不用前缀is——is表示属性布尔。
self.isTouchEnabled = YES;this->setTouchEnabled(true);
代码惯例
1)CG开头的类,一律改成CC开头。比如CGSize==》CCSize
2)静态方法 [XX XX] 改成 XX::XX
3)实例方法 [xx XX] 改成 xx->XX();
4)[XX node] 改成 XX::create();
5)@"" 改成 ""
6)CGPointMake(...) 改成 ccp(...);
7)self 改成 this
8)[CCSprite spriteWithFile 改成 CCSprite::create
9)CCMoveBy actionWithDuration 改成 CCMoveBy::create
10)CCSequence actions 改成 CCSequence::create
11)[CCTouchDispatcher sharedDispatcher] 改成 CCDirector::sharedDirector()->getTouchDispatcher()
12)CCRectContainsPoint(node->boundingBox(), touchLocation); 改成 node->boundingBox().containsPoint(touchLocation);
13)[self schedule:@selector(countBullets:) interval:3]; 改成
典型错误
1)子类没有写触摸事件
2)没有写命名空间
正确是
创建地图
tileMap = CCTMXTiledMap::create("bigMap.tmx");
- CocosX学习实录02——第5章 CCLayer子类的一般写法,obj-C改C++,
- CocosX学习实录01
- CocosX学习实录03
- C++调用C的一般写法
- IOS第七天——Obj-C中的继承
- obj-c学习笔记
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- 数据结构学习实录四—后缀表达式的计算(C++)
- C语言学习过程中遇到的一些问题——already define in *.obj
- IOS学习笔记——Obj-c中实例方法与类方法的区别
- C语言学习笔记——关于 .obj 文件的理解
- IOS第十天——Obj-C的属性
- IOS第十天——Obj-C的属性
- IOS第十天——Obj-C的属性
- IOS第九天——Obj-C中的类别和协议
- IOS第九天——Obj-C中的类别和协议
- ubuntu中修改DNS
- 断言(C++大师Andrei Alexandrescu的文章)
- LIBSVM在matlab中使用小结
- hdu2851
- java循环障碍CyclicBarrier
- CocosX学习实录02——第5章 CCLayer子类的一般写法,obj-C改C++,
- REST 与 SOAP巅峰对话
- POJ2590:Steps
- iOS5分辨率适配
- CWebBrowser2加载打印心得
- 中国经济 警惕黑天鹅
- 深入浅出 - Android系统移植与平台开发(七)- 初识HAL
- 关于UIView重复动画效果的问题
- 【程序1】1~4组成无重复数字的三位数