基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)
在飞机大战游戏开发中遇到的问题和解决方法:
1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图:

查了很多资料,调试了很长时间,整个人都要崩溃了。
最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem。如图:
码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错。老版本的果然又不完善的地方,整个人都不好了...
果断修改引擎里的源只要在遍历中使用子节点之前判断一下是否为CCMenuItem类型即可,如图:

2.在开发的时候,难免要用到键盘消息来测试程序功能,但是找了很久发现引擎中没有为我们传出键盘消息。所以...果断修改源码。
步骤一:在CCLayer类声明中public下添加virtual void processWin32KeyPress( UINT message, WPARAM wParam, LPARAM lParam) {}
步骤二:在CCEGLView类声明中private下添加变量CCLayer *m_pLayWin32Key;在public下添加函数void SetWin32KeyLayer(CCLayer *pLayer){m_pLayWin32Key = pLayer;}
步骤三:在CCEGLView构造函数中初始化CCLayer(NULL);WindowProc函数最开始添加if (NULL != m_pLayWin32Key){m_pLayWin32Key->processWin32KeyPress(message, wParam, lParam);}
步骤四:重新生成libcocos2d;
步骤五:在继承于CCLayer类的子类的构造或者初始化函数中添加CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer( this );
步骤六:在子类中重写processWin32KeyPress函数处理键盘消息;
步骤七:子类的析构或析构之前的函数中添加CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer( NULL)。
这样我们就可以随心所欲地处理消息了。
3.在用键盘方向键控制飞机移动时,发现总有些卡顿。其实是这种机制有问题。
解决方法:不要再处理消息时移动飞机,而是在处理消息时仅仅设置运动方式,在回扫刷新函数中,根据飞机的运动方式去移动飞机。
基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)的更多相关文章
- 基于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的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行
一.版本迁移中的问题 1.游戏元素Sprite.Label.Action等等的创建函数名都改为create. 2.函数的回调callfunc_selectorcallfuncN_selectorcal ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- 用Javascript模拟微信飞机大战游戏
最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...
- 11.pygame飞机大战游戏整体代码
主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...
- "飞机大战"游戏_Java实现_详细注释
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...
- 一、利用Python编写飞机大战游戏-面向对象设计思想
相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...
- "飞机大战"游戏_Java
1 package cn.xiaocangtian.Util; import java.awt.Frame; import java.awt.Graphics; import java.awt.Ima ...
随机推荐
- 24、springboot与缓存(2)
具体看上文!!! @Service public class EmpService { @Autowired EmployeeMapper employeeMapper; @Cacheable(cac ...
- 一款不错的网站压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...
- Mac安装软件时提示已损坏的解决方法
问题描述 最近安装从网上下载的软件,安装完之后打开提示xxx已损坏,打不开,软件无法打开. 其实,这是新系统(macOS Sierra 10.12.X)新安全机制的锅,它默认不允许用户自行下载安装应用 ...
- php7.0编译安装
1.解压安装 tar zxvf php-7.0.2.tar.gz cd php-7.0.2 2.安装依赖库: yum -y install libjpeg libjpeg-devel libpng ...
- 当面试官问你sql优化的时候。。。
当面试官问你有关sql优化的问题时,直接拿笔写给他: 8-select 9-distinct<column_list> 1-from left_table 3-<join_type& ...
- OpenID Connect Core 1.0(四)使用授权码流验证(上)
3.1 使用授权码流验证(Authentication using the Authorization Code Flow) 本节描述如何使用授权码流执行验证.当使用授权码流时,会从令牌终结点返回的所 ...
- react路由传参
方法1 <刷新页面参数会消失> <Link className="item" to={{pathname:'/order',params:{index :&quo ...
- C++快速开发样本工程的建立--建立工程
因为QT建立工程清晰整洁,便于作为样板工程原型.采用QT 5.8.0 64位版本建立工程. 1.建立工程 打开VS2015 新建->新建项目->QT GUI Application -&g ...
- #leetcode刷题之路23-合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2- ...
- scrapy管道MySQL简记
import pymysqlfrom scrapy.exceptions import DropItemimport time class ErshouchePipeline(object): def ...