cocos2dx打飞机项目笔记三:HeroLayer类和坐标系
HeroLayer类主要是处理hero的一些相关东西,以及调用bulletLayer的一些方法,因为子弹是附属于hero的~~
HeroLayer 类的成员如下:
class HeroLayer : public CCLayer
{
public: static HeroLayer* create();
virtual bool init(); virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);//触摸事件
void moveHero(CCPoint toPoint);//移动hero void heroBomb(float dt);//hero爆炸处理
void newLifeInit(float dt);//hero爆炸后初始化新的开始 CC_SYNTHESIZE(CCSprite*, m_Hero, Hero);
CC_SYNTHESIZE(bool, m_IsHeroLive, IsHeroLive);
CC_SYNTHESIZE(BulletLayer*, m_Bullets, Bullets);
CC_SYNTHESIZE(int, m_HeroLifes, HeroLifes); private: cocos2d::CCSize designResolutionSize; };
重点一:touchesMoveed 移动hero
这里主要是设计到坐标转换问题,cocos2dx里有几种坐标系:UI坐标系、GL坐标系、本地坐标系和世界坐标系:
UI坐标系:以屏幕的左上角为原点,X坐标向左为正,Y坐标向下为正,一些touch事件获取到的坐标就是以这个坐标系为标准的。
GL坐标系:也就是openGL坐标系,以屏幕的左下角为原点,X坐标向左为正,Y坐标向上为正,cocos2dx引擎底层是openGL,也用这个坐标系,一些控件的添加或设置是以这个坐标系为准的。
本地坐标系:子节点的左下角相对于父节点左下角的坐标,也就是以父节点的左下角为坐标原点,X坐标向左为正,Y坐标向上为正。boundingBox 方法获取到的节点的rect的坐标就是这个坐标。
cocos2dx提供了一些方法来实现不同坐标系的转换,其实cocos2dx也提供了直接从触摸点的参数里获取GL坐标。
ccTouchesMoveed方法实现如下:
void HeroLayer::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
/*
* 坐标系统
* cocos2dx坐标系统(opengl坐标系统):以左下角为原点
* UI坐标系统(绘图坐标系统、纹理坐标系统):以左上角为原点
*/ //hero是否还活着
if(this->m_IsHeroLive)
{
/*
* 触摸事件获取坐标的几个方法
*
* getLocation:获取触摸时第一点的cocos2dx 坐标
* getPreviousLocation 获取触摸时最后一点 cocos2dx 坐标
* getLocationInView 获取触摸时第一点的UI坐标
* getPreviousLocationInView 获取触摸时的最后一点 UI坐标
*/ CCTouch *touches = (CCTouch*)pTouches->anyObject(); CCPoint beginPoint = touches->getLocation();//获取触摸坐标(cocos2dx坐标系统的) CCRect planeRect = this->m_Hero->boundingBox();//获取飞机当前位置形状位置 //允许稍微加大一点触摸位置,游戏实际需要
//planeRect.origin.x -= 15;
//planeRect.origin.y -= 15;
//planeRect.size.width += 30;
//planeRect.size.height += 30; if(planeRect.containsPoint(beginPoint))
{
CCPoint endPoint = touches->getPreviousLocation();//获取触摸的前一个位置
HeroLayer::moveHero(endPoint); //移动飞机
}
}
}
cocos2dx打飞机项目笔记三:HeroLayer类和坐标系的更多相关文章
- cocos2dx打飞机项目笔记一:项目结构介绍
最近在学习cocos2dx引擎,版本是2.1.3,开发环境是win7 + vs2010,模仿微信打飞机游戏,开发中参考了 csdn 偶尔e网事 的系列文章:http://blog.csdn.net/c ...
- cocos2dx打飞机项目笔记四:Enemy类和EnemyLayer类
Enemy类没什么内容,就create和init方法,根据参数来创建不同的敌机,头文件代码如下: //飞机的类型 enum planeType {smallPlane, midPlane, bigPl ...
- cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox
GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: void GameScene::detectionCrash() { CCArray ...
- cocos2dx打飞机项目笔记二:BulletLayer类
BulletLayer.h 内容如下 class BulletLayer : public cocos2d::CCLayer { public: CC_SYNTHESIZE(bool, m_IsHer ...
- cocos2dx打飞机项目笔记七:各种回调:定时器schedule、普通回调callFunc、菜单回调menu_selector、事件回调event_selector
各种回调函数的定义: typedef void (CCObject::*SEL_SCHEDULE)(float); typedef void (CCObject::*SEL_CallFunc)(); ...
- cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
在上一节里,在头文件看到 定义了一个 CCSpriteBatchNode* batchNode;,在addEnemy方法里看到 batchNode->addChild(enemy); 新建的敌机 ...
- MyBatis学习笔记(三) Configuration类
一.初探Configuration类 我们先来看一下MyBatis的XML配置文件的结构,(摘自mybatis.org) 下面这个是Configuration类的部分变量 一点不一样是不是??? 其实 ...
- (转)Qt Model/View 学习笔记 (三)——Model类
Model类 基本概念 在model/view构架中,model为view和delegates使用数据提供了标准接口.在Qt中,标准接口QAbstractItemModel类中被定义.不管数据在底层以 ...
- JVM学习笔记(三):类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 实现语言无关性的基础是虚拟机和字节码存储格式.Java虚拟机不和包括Java在内的任何语言绑定,只与&quo ...
随机推荐
- 从获取点击事件根元素谈 target和currentTarget
事情由来: 写了一个点击事件,想获取根元素,想的直接用current就行了,因为之前就是这么用的,但是之前的点击元素是没子元素的,current就是根元素,但是这次点击元素内部有子元素,current ...
- Java快车读书笔记
办公自动化:OA 客户关系管理:CRM人力资源:HR 企业资源计划:ERP知识管理:KM 供应链管理:SCM企业设备管理系统:EAM 产品生命周期管理:PLM面向服务体系架构:SOA 商业智能:BI项 ...
- AsyncTask机制学习
其内容可以参考http://blog.csdn.net/webgeek/article/details/17298237 ,首先创建一个AsyncTask类 class GetFaceDetectTa ...
- B - Catch That Cow (抓牛)
B - Catch That Cow Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- mysql 日期加减天数
MySQL 为日期增加一个时间间隔:date_add() now() //now函数为获取当前时间 select date_add(now(), interval 1 day); - 加1 ...
- mongodb超时
1 connection timeout 设置连接mongo数据库的超时时间,如果在该时间内未连接成功,那么就是超时了. 2 socket timeout 设置一次操作的超时时间,比如一次查询,如果在 ...
- code first 数据库无损迁移
环境:vs2013+nuget Enable-Migrations -EnableAutomaticMigrations Update-Database
- <2013 10 18> Linux随机数生成器可能确实存在安全弱点
生成随机数是密码学中的一项基本任务,是生成加密密钥和加密算法或加密协议所必不可少的.理想中的随机数是完美的,但实践中的随机数都是用伪随机数生成器(PRNG)生成,随机数的质量对安全性至关重要.安全专家 ...
- ECMAScript6重复字符串方法repeat()
repeat() 1.定义 repeat()方法返回一个新字符串,新字符串将对象字符串重复指定次数. 2.语法 str.repeat(count) count:表示新构造的字符串把原字符串重复的次数, ...
- Linux CentOS使用yum安装Docker
Docker支持以下的CentOS版本: 目前,CentOS仅发行版本中的内核支持Docker. Docker运行在CentOS7上,要求系统为64位.系统内核版本为3.10以上. Docker运行在 ...