基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行
一、版本迁移中的问题
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
- MenuItemLabel *pauseItem = MenuItemLabel::create(
- Label::create("pause", "Adobe Ming Std L", ),
- this,
- menu_selector(MyLayer::menuPauseCallback));
- MenuItemLabel *pauseItem = MenuItemLabel::create(
- Label::create("pause", "Adobe Ming Std L", ),
- 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:
- //Label
- Label* Label1 = Label::createWithSystemFont("","YouYuan",);
- Label* Label2 = Label::createWithTTF("","YouYuan",);
- Label* Label3 = Label::createWithBMFont("font/font.fnt","");
6.消息的处理方式都改为触发器模式:
- // 键盘消息可用
- auto listenerKey = EventListenerKeyboard::create();
- listenerKey->onKeyPressed = CC_CALLBACK_2(PlaneWarGame::onKeyPressed, this);
- listenerKey->onKeyReleased = CC_CALLBACK_2(PlaneWarGame::onKeyReleased, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listenerKey, this);
7.将所有标记为废弃的API替换为新的API,消除项目编译过程中的警告。
二、移植到Android平台
最初移植到Android平台时是这个样子的:
原因是Android手机分辨率太大了,修改AppDelegate::applicationDidFinishLaunching() 函数即可:
- static cocos2d::Size largeSize = cocos2d::Size(,);
- static cocos2d::Size designResolutionSize = cocos2d::Size(, );
- bool AppDelegate::applicationDidFinishLaunching() {
- // initialize director
- auto director = Director::getInstance();
- auto glview = director->getOpenGLView();
- if(!glview) {
- glview = GLView::create("planeGame");
- // mi3手机分辨率:1920x1080
- glview->setFrameSize(largeSize.width,largeSize.height);
- director->setOpenGLView(glview);
- glview->setDesignResolutionSize(, , ResolutionPolicy::NO_BORDER);
- }
- director->setContentScaleFactor(0.5f);
- // turn on display FPS
- director->setDisplayStats(true);
- // set FPS. the default value is 1.0/60 if you don't call this
- director->setAnimationInterval(1.0 / );
- // create a scene. it's an autorelease object
- auto scene = PlaneWarMenu::scene();
- // run
- director->runWithScene(scene);
- return true;
- }
改完之后,游戏就可以更好的适配Android屏幕了。
基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行的更多相关文章
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)
接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)
最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...
- 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)
在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...
- 11.pygame飞机大战游戏整体代码
主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...
- 用Javascript模拟微信飞机大战游戏
最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...
- 一、利用Python编写飞机大战游戏-面向对象设计思想
相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...
- Canvas:飞机大战 -- 游戏制作
Canvas:飞机大战 最开始我们要初始化信息,我们有五个状态:游戏封面,加载状态,运行状态,游戏暂停,游戏结束. 我们还需要 得分--score,生命--life. var START = 1;/ ...
- H5 canvas 实现飞机大战游戏
首先看几张效果图: 上面三张图分别对应游戏的三种状态 ready,play,pause.体验一下 先介绍一下canvas 画图的原理,在这个游戏中的背景,飞机,子弹以及飞机被击中爆炸的效果都是一张张的 ...
- web版canvas做飞机大战游戏 总结
唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下, ...
随机推荐
- python常见释疑(有别于报错)(不定时更新)
文:铁乐与猫 01.在cmd运行py脚本后,直接回到了提示符,没有任何输出,看起来像是并没有运行一样. 答:你的感觉很可能是对的,但脚本很可能己经正常运行,只是你的代码里面很可能没有给出print提示 ...
- css实现梯形
使用伪元素before和after分别在矩形元素前后加三角形或者直接设置border 使用3d旋转矩形,使之看起来像矩形 <html> <head> <meta char ...
- Session攻击
1.简介 Session对于Web应用无疑是最重要的,也是最复杂的.对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,进而 ...
- HDFS下载数据机制的底层分析
HDFS下载数据机制的底层分析 Hadoop中的RPC(Remote Procedure Call)框架 hadoop中结点间的通信采用的是RPC. RPC框架的实现机制图解: 从hdfs下载数据的源 ...
- 跟我一起阅读Java源代码之HashMap(一)
最近闲的很,想和大家一起学习并讨论下Java的一些源代码以及其实现的数据结构, 不是什么高水平的东西,有兴趣的随便看看 1. 为什么要用Map,以HashMap为例 很多时候我们有这样的需求,我们需要 ...
- Centos7使用yum安装Mysql5.7.19的详细步骤(可用)
Centos7的yum源中默认是没有mysql,因为现在已经用mariaDB代替mysql了. 首先我们下载mysql的repo源,我们可以去mysql官网找最新的repo源地址 地址: https: ...
- Regular Expression Patterns
Regular Expression Patterns Following lists the regular expression syntax that is available in Pytho ...
- VMware三个版本号workstation、server、esxi的差别
VMware三个版本号 workstation: 单机级.用在个人桌面系统中.须要操作系统支持 servier:工作组级,用于服务器.须要操作系统支持 esxi:企业级,用于服务器,不须要操作系统支持 ...
- 理解JVM——类加载机制
我们在编写Java程序之后,会通过编译器得到一个class文件,这个class文件是如何与JVM进行配合的呢?类中的信息是如何变成JVM可以使用的Java类型呢?这些都是类加载机制做到的. 虚拟机把描 ...
- android创建目录和文件和安装其它apk
一.android下创建目录 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/no ...