一、版本迁移中的问题

1.游戏元素Sprite、Label、Action等等的创建函数名都改为create。

2.函数的回调
callfunc_selector
callfuncN_selector
callfuncND_selector
callfuncO_selector
menu_selector
改为使用C++11的新特性std::bind和std::function配合使用:
CC_CALLBACK_0
CC_CALLBACK_1
CC_CALLBACK_2
CC_CALLBACK_3

  1. MenuItemLabel *pauseItem = MenuItemLabel::create(
  2. Label::create("pause", "Adobe Ming Std L", ),
  3. this,
  4. menu_selector(MyLayer::menuPauseCallback));
  5.  
  6. MenuItemLabel *pauseItem = MenuItemLabel::create(
  7. Label::create("pause", "Adobe Ming Std L", ),
  8. CC_CALLBACK_1(MyLayer::menuPauseCallback,this));

3.内部类名都去掉了前缀CC,使用 clone 替代 copy,单例类采用了 getInstance 和 destroyInstance,使用了 Ref 代替了 Object,这是因为cocos2dx官方的去OC化行为

4.模板容器
使用 cocos2d::Map<> 替代了 CCDictionary ;

使用 cocos2d::Vector<> 替代了 CCArray;

5.LabelTTF / LabelBMFont / LabelAtlas三种标签类被合并成一个类Label:

  1. //Label
  2. Label* Label1 = Label::createWithSystemFont("","YouYuan",);
  3. Label* Label2 = Label::createWithTTF("","YouYuan",);
  4. Label* Label3 = Label::createWithBMFont("font/font.fnt","");

6.消息的处理方式都改为触发器模式:

  1. // 键盘消息可用
  2. auto listenerKey = EventListenerKeyboard::create();
  3. listenerKey->onKeyPressed = CC_CALLBACK_2(PlaneWarGame::onKeyPressed, this);
  4. listenerKey->onKeyReleased = CC_CALLBACK_2(PlaneWarGame::onKeyReleased, this);
  5. _eventDispatcher->addEventListenerWithSceneGraphPriority(listenerKey, this);

7.将所有标记为废弃的API替换为新的API,消除项目编译过程中的警告。

二、移植到Android平台

最初移植到Android平台时是这个样子的:

原因是Android手机分辨率太大了,修改AppDelegate::applicationDidFinishLaunching() 函数即可:

  1. static cocos2d::Size largeSize = cocos2d::Size(,);
  2. static cocos2d::Size designResolutionSize = cocos2d::Size(, );
  3.  
  4. bool AppDelegate::applicationDidFinishLaunching() {
  5. // initialize director
  6. auto director = Director::getInstance();
  7. auto glview = director->getOpenGLView();
  8. if(!glview) {
  9. glview = GLView::create("planeGame");
  10. // mi3手机分辨率:1920x1080
  11. glview->setFrameSize(largeSize.width,largeSize.height);
  12. director->setOpenGLView(glview);
  13. glview->setDesignResolutionSize(, , ResolutionPolicy::NO_BORDER);
  14. }
  15.  
  16. director->setContentScaleFactor(0.5f);
  17.  
  18. // turn on display FPS
  19. director->setDisplayStats(true);
  20.  
  21. // set FPS. the default value is 1.0/60 if you don't call this
  22. director->setAnimationInterval(1.0 / );
  23.  
  24. // create a scene. it's an autorelease object
  25. auto scene = PlaneWarMenu::scene();
  26.  
  27. // run
  28. director->runWithScene(scene);
  29.  
  30. return true;
  31. }

改完之后,游戏就可以更好的适配Android屏幕了。

基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行的更多相关文章

  1. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  2. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)

    最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...

  3. 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

    在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...

  4. 11.pygame飞机大战游戏整体代码

    主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...

  5. 用Javascript模拟微信飞机大战游戏

    最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...

  6. 一、利用Python编写飞机大战游戏-面向对象设计思想

    相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...

  7. Canvas:飞机大战 -- 游戏制作

    Canvas:飞机大战 最开始我们要初始化信息,我们有五个状态:游戏封面,加载状态,运行状态,游戏暂停,游戏结束. 我们还需要  得分--score,生命--life. var START = 1;/ ...

  8. H5 canvas 实现飞机大战游戏

    首先看几张效果图: 上面三张图分别对应游戏的三种状态 ready,play,pause.体验一下 先介绍一下canvas 画图的原理,在这个游戏中的背景,飞机,子弹以及飞机被击中爆炸的效果都是一张张的 ...

  9. web版canvas做飞机大战游戏 总结

    唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下, ...

随机推荐

  1. python常见释疑(有别于报错)(不定时更新)

    文:铁乐与猫 01.在cmd运行py脚本后,直接回到了提示符,没有任何输出,看起来像是并没有运行一样. 答:你的感觉很可能是对的,但脚本很可能己经正常运行,只是你的代码里面很可能没有给出print提示 ...

  2. css实现梯形

    使用伪元素before和after分别在矩形元素前后加三角形或者直接设置border 使用3d旋转矩形,使之看起来像矩形 <html> <head> <meta char ...

  3. Session攻击

    1.简介 Session对于Web应用无疑是最重要的,也是最复杂的.对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,进而 ...

  4. HDFS下载数据机制的底层分析

    HDFS下载数据机制的底层分析 Hadoop中的RPC(Remote Procedure Call)框架 hadoop中结点间的通信采用的是RPC. RPC框架的实现机制图解: 从hdfs下载数据的源 ...

  5. 跟我一起阅读Java源代码之HashMap(一)

    最近闲的很,想和大家一起学习并讨论下Java的一些源代码以及其实现的数据结构, 不是什么高水平的东西,有兴趣的随便看看 1. 为什么要用Map,以HashMap为例 很多时候我们有这样的需求,我们需要 ...

  6. Centos7使用yum安装Mysql5.7.19的详细步骤(可用)

    Centos7的yum源中默认是没有mysql,因为现在已经用mariaDB代替mysql了. 首先我们下载mysql的repo源,我们可以去mysql官网找最新的repo源地址 地址: https: ...

  7. Regular Expression Patterns

    Regular Expression Patterns Following lists the regular expression syntax that is available in Pytho ...

  8. VMware三个版本号workstation、server、esxi的差别

    VMware三个版本号 workstation: 单机级.用在个人桌面系统中.须要操作系统支持 servier:工作组级,用于服务器.须要操作系统支持 esxi:企业级,用于服务器,不须要操作系统支持 ...

  9. 理解JVM——类加载机制

    我们在编写Java程序之后,会通过编译器得到一个class文件,这个class文件是如何与JVM进行配合的呢?类中的信息是如何变成JVM可以使用的Java类型呢?这些都是类加载机制做到的. 虚拟机把描 ...

  10. android创建目录和文件和安装其它apk

    一.android下创建目录 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/no ...