HeroLayer类主要是处理hero的一些相关东西,以及调用bulletLayer的一些方法,因为子弹是附属于hero的~~

HeroLayer 类的成员如下:

 1 class HeroLayer : public CCLayer
 2 {
 3 public:
 4
 5     static HeroLayer* create();
 6     virtual bool init();
 7
 8     virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);//触摸事件
 9     void moveHero(CCPoint toPoint);//移动hero
10
11     void heroBomb(float dt);//hero爆炸处理
12     void newLifeInit(float dt);//hero爆炸后初始化新的开始
13
14
15     CC_SYNTHESIZE(CCSprite*, m_Hero, Hero);
16     CC_SYNTHESIZE(bool, m_IsHeroLive, IsHeroLive);
17     CC_SYNTHESIZE(BulletLayer*, m_Bullets, Bullets);
18     CC_SYNTHESIZE(int, m_HeroLifes, HeroLifes);
19
20 private:
21
22     cocos2d::CCSize designResolutionSize;
23
24 };

重点一:touchesMoveed 移动hero

这里主要是设计到坐标转换问题,cocos2dx里有几种坐标系:UI坐标系、GL坐标系、本地坐标系和世界坐标系:

UI坐标系:以屏幕的左上角为原点,X坐标向左为正,Y坐标向下为正,一些touch事件获取到的坐标就是以这个坐标系为标准的。

GL坐标系:也就是openGL坐标系,以屏幕的左下角为原点,X坐标向左为正,Y坐标向上为正,cocos2dx引擎底层是openGL,也用这个坐标系,一些控件的添加或设置是以这个坐标系为准的。

本地坐标系:子节点的左下角相对于父节点左下角的坐标,也就是以父节点的左下角为坐标原点,X坐标向左为正,Y坐标向上为正。boundingBox 方法获取到的节点的rect的坐标就是这个坐标。

cocos2dx提供了一些方法来实现不同坐标系的转换,其实cocos2dx也提供了直接从触摸点的参数里获取GL坐标。

ccTouchesMoveed方法实现如下:

 1 void HeroLayer::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
 2 {
 3     /*
 4      *    坐标系统
 5      *  cocos2dx坐标系统(opengl坐标系统):以左下角为原点
 6      *  UI坐标系统(绘图坐标系统、纹理坐标系统):以左上角为原点
 7      */
 8
 9     //hero是否还活着
10     if(this->m_IsHeroLive)
11     {
12         /*
13          *    触摸事件获取坐标的几个方法
14          *
15          *  getLocation:获取触摸时第一点的cocos2dx 坐标
16          *  getPreviousLocation 获取触摸时最后一点 cocos2dx 坐标
17          *  getLocationInView 获取触摸时第一点的UI坐标
18          *  getPreviousLocationInView 获取触摸时的最后一点 UI坐标
19          */
20
21         CCTouch *touches = (CCTouch*)pTouches->anyObject();
22
23         CCPoint beginPoint = touches->getLocation();//获取触摸坐标(cocos2dx坐标系统的)
24
25         CCRect planeRect = this->m_Hero->boundingBox();//获取飞机当前位置形状位置
26
27         //允许稍微加大一点触摸位置,游戏实际需要
28         //planeRect.origin.x -= 15;
29         //planeRect.origin.y -= 15;
30         //planeRect.size.width += 30;
31         //planeRect.size.height += 30;
32
33         if(planeRect.containsPoint(beginPoint))
34         {
35             CCPoint endPoint = touches->getPreviousLocation();//获取触摸的前一个位置
36             HeroLayer::moveHero(endPoint); //移动飞机
37         }
38     }
39 }

cocos2dx打飞机项目笔记三:HeroLayer类和坐标系相关推荐

  1. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox

    GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: 1 void GameScene::detectionCrash() 2 { 3 4 ...

  2. cocos2dx打飞机项目笔记二:BulletLayer类

    BulletLayer.h 内容如下 1 class BulletLayer : public cocos2d::CCLayer 2 { 3 4 public: 5 6 CC_SYNTHESIZE(b ...

  3. cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用

    在上一节里,在头文件看到 定义了一个 CCSpriteBatchNode* batchNode;,在addEnemy方法里看到 batchNode->addChild(enemy); 新建的敌机 ...

  4. 《Effective Java》读书笔记三(类和接口)

    No13 使类和成员的可访问性最小化 要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节.模块之间只通过它们的API进行通信,一个 ...

  5. Ruby笔记三(类、对象、属性)

    class Person   #initialize是初始化方法,相当于Java的构造器.参数age有一个缺省值18,   #可以在任何方法内使用缺省参数,而不仅仅是initialize.如果有缺省参 ...

  6. ASP.Net MVC OA项目笔记三

    1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession ...

  7. 树莓派魔镜项目——笔记三 第三方库

    介绍几个第三方模块 由于部分module使用了api,则可能涉及以下情况: 1:直接可用的 2:需要科学上网的 3:需要申请api key的 主要修改mouts/config/config.js文件, ...

  8. Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

    2019独角兽企业重金招聘Python工程师标准>>> 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着<赢在中国& ...

  9. 视频教程-Cocos2d-x 3.x项目实战:星空大战(射击类游戏)-Cocos

    Cocos2d-x 3.x项目实战:星空大战(射击类游戏) 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲 ...

最新文章

  1. Hibernate 缓存机制
  2. archer mysql源码_自动化运维工具inception+archer
  3. element 修改分页样式_如何给wordpress网站的文章列表,添加分页效果?可以通过2种方式...
  4. 采用lamp架构搭建discuz论坛
  5. codeforces 160A-C语言解题报告
  6. 排序算法比较以及代码展示
  7. erlang一次线上问题解决
  8. docker server 容器连接sql_借力 Docker ,三分钟搞定 MySQL 主从复制!
  9. 电子科技大学《图论及其应用》复习总结--第六章 平面图
  10. windows系统安装curl
  11. Tomcat修改端口号图文详解
  12. 限时免费抢!正版卡巴斯基安全部队2011激活码1年
  13. 码农、程序员、工程师这三者之间有什么区别?
  14. 计算机专业y9000x,LEGION Y9000X笔记本U盘一键重装Win10专业版的教程
  15. Android 实现沉浸式状态栏
  16. 在职阿里3年,一个27岁女软件测试工程师的心声
  17. VSCode,webstorm绿色护眼背景设置
  18. MATLAB三维画图函数使用总结
  19. 最新-2020年必须缴费注册苹果开发者账号才能申请ios证书
  20. iOS自动化笔记(一)WebDriverAgent安装与使用

热门文章

  1. 若依如何修改超级管理员登录密码?
  2. 微信小程序如何快速生成wxml,wxss,json,js目录文件
  3. nginx做代理服务
  4. c语言处理机调度实验报告,操作系统实验处理机调度C语言实现.docx
  5. vb.ne textbox数字保存excel_Excel 另类保护:锁死页面布局、保存、审阅标签右键等菜单禁编辑...
  6. keycloak中文使用文档_基于DOCKER安装配置keycloak
  7. android sdk 8.1.0,OneAPM版本更新:Android SDK 1.0.8
  8. php开源qq群,QQ群免IDKEY加群PHP源码
  9. 揪出造成失败用户登录的应用主机名、数据库用户信息
  10. Oracle中字符串转义问题总结