转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11730601

不过明眼人一看就知道起飞的不是飞机,是背景,相对运动引起的错觉。

1.cocos2d-x引擎的坐标系

在这之前我们先了解一下cocos2d-x引擎中的坐标系:

(1)openGL & openGL ES坐标系。这也是触摸事件中使用的坐标系,原点在左上,坐标值往右下方向递增。

(2)世界坐标系。这是cocos2d-x中使用的坐标系。也是我们平常编程所使用的,原点在左下,坐标值往右上方向递增。

(3)节点坐标系。这是一个相对坐标系,是指节点一旦移动,和它关联的节点也会随之移动。

(1)和(2)之间的转换是我们经常要处理的,其实它们的纵坐标和即是屏幕的高。当然Cocos2d-x也提供了非常方便的转换函数给我们使用。

CCPoint CCDirector::convertToGL(const CCPoint& uiPoint)
{CCSize s = m_obWinSizeInPoints;float newY = s.height - uiPoint.y;return ccp(uiPoint.x, newY);
}CCPoint CCDirector::convertToUI(const CCPoint& glPoint)
{CCSize winSize = m_obWinSizeInPoints;float oppositeY = winSize.height - glPoint.y;return ccp(glPoint.x, oppositeY);
}

2.锚点

锚点在cocos2d-x引擎中是个很重要的概念,可以这么理解,锚点就是一个基准点。比如我们要把一个100x200的长方形放在屏幕上。

第一种情况

m_sprite->setAnchorPoint(ccp(0.5,0.5));
m_sprite->setPosition(ccp(300,300));

第二种情况

m_sprite->setAnchorPoint(ccp(0,0));
m_sprite->setPosition(ccp(300,30));

3.飞机要起飞了

不,背景要起飞了。

这里我们采用的办法是让2张一样的背景循环进行滚动,然后通过每次滚动的时间间隔和像素间隔来控制背景滚动的速度,也就是飞机飞行的速度。注意图1和图2是一模一样的,所以最后一步是用图1替换了图2。记住图片的高度必须比屏幕高度高,不然在图2走到(0,0)的时候会有黑边出现。。。

bool GameLayer::init()
{bool bRet=false;do {CC_BREAK_IF(!CCLayer::init());//png加入全局cache中CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("shoot_background.plist");//加载background1background1=CCSprite::create(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));background1->setAnchorPoint(ccp(0,0));background1->setPosition(ccp(0,0));this->addChild(background1);//加载background2background2=CCSprite::create(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));background2->setAnchorPoint(ccp(0,0));background2->setPosition(ccp(0,background2->getContentSize().height-2));//这里减2的目的是为了防止图片交界的黑线this->addChild(background2);//执行任务计划,实现背景滚动this->schedule(schedule_selector(GameLayer::backgroundMove),0.01f);bRet=true;} while (0);return bRet;
}//背景滚动
void GameLayer::backgroundMove(float dt)
{background1->setPositionY(background1->getPositionY()-2);background2->setPositionY(background1->getPositionY()+background1->getContentSize().height-2);if (background2->getPositionY()==0)//要注意因为背景图高度是842,所以每次减去2最后可以到达0,假如背景高度是841,那么这个条件永远达不到,滚动失败{background1->setPositionY(0);}
}

调试运行,背景滚动的还不错,比较流畅。

转载于:https://www.cnblogs.com/james1207/p/3325153.html

[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了相关推荐

  1. 弹出框 每次打开 滚动条置顶_微信置顶文字怎么弄?微信置顶一句话教程

    今日支付宝红包 支付宝首页搜索511501453 马上领取红包 (支付宝双十二活动,瓜分15亿红包) (领取后一定要记得使用,不然会浪费的呦, 更会影响第二天的领取!) 奶思靓机 " 一 个 ...

  2. 怎么用java做全民飞机大战_Java飞机大战游戏设计与实现

    1 概述 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程中的一些窗口类库. ...

  3. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端

    简介: 飞机大战HTML5游戏源码是一款基于Canvas制作的网页版飞机大战游戏,画质精美的飞机大战手机端游戏源码 网盘下载地址: http://kekewangLuo.net/W1S2LQcqAT2 ...

  4. python飞机大战子弹不显示_飞机大战游戏 飞机打出一发子弹后就不出现子弹了...

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x # main.py import pygame import sys import tracebac ...

  5. java小游戏飞机大战_飞机大战小游戏Java(1)

    雷电游戏大家应该很多都玩过吧(至少95后的我有段时间一直玩····没玩过可能你太年轻了hhh),然后我们今天做一个类似的小游戏.软件:eclipse.exe 编程语言:JAVA 首先,还是要做个窗口界 ...

  6. [置顶] Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

  7. [置顶] Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  8. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  9. [置顶] Fedora使用入门与基本配置

    Fedora使用入门与基本配置 ------------------------ 注:以下内容为个人学习总结,另有部分内容转载自互联网,版权归原著所有,本博内容仅供个人学习使用. ---------- ...

  10. 飞机大战-控制飞机左右移动二

    # -*- coding:utf-8 -*-import pygame from pygame.locals import * import timedef main():#1. 创建窗口screen ...

最新文章

  1. setsockopt 设置socket 详细用法
  2. 微信小程序实践_1前言
  3. Java日志性能那些事
  4. ibm java英语面试_IBMJava英文面试题(附参考答案)
  5. hive 把mysql语句执行_R分别连接mysql hive执行操作
  6. 遇见好链接(我还并没有看)
  7. 计算机编程学英语词汇,计算机编程英语词汇大全
  8. magento php mysql_Mysql版本过低导致Magento报错的解决方案
  9. transformClassesWithProfilers-transformForDebug
  10. Git 生成SSH Key 之使用PuTTYgen工具
  11. DllRegisterServer调用失败的解决办法
  12. js获取某一天的零点时刻和某天的23:59
  13. 【mysql】 Windows下使用DOS命令进入MySQL数据库
  14. TFS2010合并与分支(Branch and Merge)
  15. 计算机二级补录成绩,成考没考过怎么办有补录机会吗
  16. coreseek php接口,筹建coreseek(sphinx+mmseg3)详细安装配置+php之sphinx扩展安装+php调用示例...
  17. app内嵌h5分享到小程序分享功能
  18. Python选基金(爬虫+策略)
  19. ARM单片机堆栈检查溢出
  20. oracle触发器输出信息,插入后oracle触发器打印

热门文章

  1. 拓端tecdat|R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
  2. 【大数据部落】R语言基于决策树的银行信贷风险预警模型
  3. 7-22 切分表达式——写个tokenizer吧 (20 分)
  4. 基于React和SpringBoot做一个记事本
  5. css基础知识汇总6
  6. rasa 中文 UnsupportedLanguageError: component ‘LanguageModelTokenizer‘ does not support language ‘zh‘.
  7. 2012怎么设置index.php,配置伪静态.htaccess去掉wordpress固定连接里的index.php
  8. mysql开启事务并锁表_MySQL:如何锁定表并启动事务?
  9. 多方安全计算、联邦学习、可信计算 对比区别
  10. zipfian 参数是什么 Zipfian distribution 齐夫定律