基于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 ...
随机推荐
- 更有效率的使用Visual Studio
工欲善其事,必先利其器.虽然说Vim和Emacs是神器,但是对于使用Visual Studio的程序员来说,我们也可以通过一些快捷键和潜在的一些功能实现脱离鼠标写代码,提高工作效率,像使用Vim一样使 ...
- 虚拟机和主机文件实时同步 -- winsshfs的快速入手
之前在公司使用mac ,并且通过mac下的osfuse和sshfs连接,直接将虚拟机的文件目录同步到了本地,并且可以进行实时操作修改,对于写项目,确实是省了很大一部分上传的精力. 于是在自己的win下 ...
- LD-sketch源码阅读
目录 util.h hash.hpp/cpp mangle函数 GenHashSeed函数 AwareHash模块 LDSketch.hpp/cpp LDSketch更新函数,对一个sketch插入键 ...
- System.Reflection 获取描述
我们需要获取类,属性,方法的描述.这个跟获取枚举的描述一样,需要我们通过反射来做.这还需要我们的利用System.ComponentModel:Description 的属性来完成. 新建一个类:使 ...
- 修改eclipse中文件打开默认方式
Window--->prefrence---->Editors----->FileAssociation 选择文件后缀,如果没有就添加,然后在上添加,删除,设置默认打开方式.
- Sql Server 部署SSIS包完成远程数据传输
本篇介绍如何使用SSIS和作业完成自动更新目标数据任务. ** 温馨提示:如需转载本文,请注明内容出处.** 本文链接:https://www.cnblogs.com/grom/p/9018978.h ...
- Spring boot 零配置开发微服务
2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...
- c#将List转换成DataTable
前面写了一篇List<T>转换成DataTable,这里主要是完善了前面的代码. 同样使用了emit,我把代码整理后上传了git. 另外增加了特性的设计. 设计了三类特性ColumnTyp ...
- nodejs中npm以及yarn常用指令
1.npm下载相关 1.npm install/i vue //下载vue的包 2.npm i vue --save-dev / -D //下载vue的包,并添加到开发依赖中 3.npm i //下载 ...
- iview admin 生成环境打包时路径问题
关于生产打包路径不对,字体图标引用错误的问题.以下是解决方案供参考:1.webpack.base.config.js 17行修改为: path: path.resolve(__dirname, '.. ...