cocos2dx3.0 打飞机

cocos2dx3.0 + vs2013 简单打飞机游戏

本文地址:http://blog.csdn.net/qq_26437925/article/details/52059069



游戏资源,借用了微信打飞机的图库

初版源码地址:https://github.com/doctording/cocos2dx_plane_cpp


滚动背景问题:


持续按键,执行动作

例如:需要移动时,若一直按着A键,那么飞机将一直往左移动

解决方案:

设置一个变量,标识A键是否被按下,在update()方法中执行左移动作

    // 键盘事件
    auto listenerKeyPad = EventListenerKeyboard::create();
    listenerKeyPad->onKeyPressed = CC_CALLBACK_2(Bg::onKeyPressed, this);
    listenerKeyPad->onKeyReleased = CC_CALLBACK_2(Bg::onKeyReleased, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listenerKeyPad, this);

    // 按键是否按下
    isAdown = false;
// 按键 按下
void Bg::onKeyPressed(EventKeyboard::KeyCode keycode, cocos2d::Event *event)
{
    switch (keycode)
    {
    case EventKeyboard::KeyCode::KEY_A:
        //Director::getInstance()->pause();
        //this->planeLayer->moveLeftOrRight(‘A‘);
        isAdown = true;
        break;
    //...
    }
}
//按键 释放
void Bg::onKeyReleased(EventKeyboard::KeyCode keycode, cocos2d::Event *event)
{
    switch (keycode)
    {
    case EventKeyboard::KeyCode::KEY_A:
        isAdown = false;
        break;
    //...
    }
}
void Bg::update(float delta)
{
    // 如果A键出于按下状态,则一直左移
    if (isAdown)
        this->planeLayer->moveLeftOrRight(‘A‘);
    //...
}

关于子弹,敌方飞机的管理

显然要自己定义子弹(Bullet) 和 敌机(Enemy)类,(Bullet,Enemy可以继承Sprite 和 Node)

因为将会有很多子弹和敌机, 必须建立管理类,

为 碰撞 和 销毁对象

管理类 采用 单例模式,头文件如下

#include "cocos2d.h"
#include "Bullet.h"
#include "Enemy.h"

USING_NS_CC;

class  Manager
{
public:

    static Manager * getInstance();// 得到实例
    static void Manager::freeInstance(void);//销毁实例

public:
    static Manager * m_manager;
    Manager();
    bool init();

public:
    Vector<Bullet *> m_bulletVector;
    Vector<Bullet *> & getBulletVector(){ return m_bulletVector; };

    Vector<EnemyBase *> m_enemyVector;
    Vector<EnemyBase *> & getEnemyVector(){ return m_enemyVector; };

};

采用Vector Array等数据结构存储所有的对象,当碰撞,出界等时,从中删除,


帧动画,各种动作(move,blink),碰撞检测,定时器等等基础知识问题



参考文章

http://blog.csdn.net/column/details/jackyairplane.html

http://www.zaojiahua.com/add-bullets-and-manager.html

时间: 2024-10-25 21:08:14

cocos2dx3.0 打飞机的相关文章

cocos2d-x-3.3-022-仿微信飞机大战-开篇介绍

原文同步发布于我的wiki,查看原文或更新请移步: 点击打开链接 写在最前面 微信飞机大战,触控的大神JackyStudio 已经在他的专栏微信飞机大战讲解中完整细致的实现了一遍,基于cocos2d-x-v2.2.0和cocos2d-x-3.0,推荐大家阅读.同时该系列的资源代码等全部开源(地址见文后链接),利于新手运用和学习.感谢分享. 我是新手,刚懂点cocos的基础.我这系列将沿着大神的足迹前进,更进一步去体会理解cocos的魅力.本系列将记录我个人在实践之路上的体会. 本系列将基于coc

Cocos2d-x3.0游戏实例之《别救我》第十篇(完结)——用Json配置各类型怪物数据

现在我们有2种类型的怪物,而且创建的时候是写死在代码里的,这是要作死的节奏~ 所以,必须可配置,不然会累死人的. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/949  文章来源:笨木头与游戏开发 Json文件 什么是Json文件?说白了,它就是一个文本文档,只不过它的内容是按照一定的规则填写的. 于是,我们就可以按照那个规则去读取这份文档. 这,就是配置文件产生的缘由(才怪). (小若:才怪是什么意

cocos2d-x3.0 用CCDictionary写文件

bool CDownLoad_LocalData::WriteToConfigFile( DownLoadLocalData* downdata ){ CCDictionary* pDict = CCDictionary::create(); unsigned int lessonid = downdata->lession_id;char s_lessonid[10];sprintf(s_lessonid,"%d",lessonid); CCString* pValue1 =

Cocos2d-X-3.0 之后的版本的环境搭建

 Cocos2d-X-3.0 之后的版本的环境搭建 由于cocos2d游戏开发引擎更新十分频繁,官方文档同步不够及时和完善.所以不要照着官方文档来照做生成工程. <点击图片就能进入网站> 具体的步骤: 1.获取cocos2d-X的源码v3.6版本 然后解压到随便什么位置,比如这里就放在桌面上,文件名cocos2d-x-3.6 2.使用5.1以上版本的XCode 3.将cocos2d-x-3.6中的setup.py直接拖到刚刚打开的终端,然后回车. 然后提示需要做一些环境变量的配置,第一个提示安

Cocos2d-x3.0 Json解析

在Cocos2dx3.0下,JSON解析库官方已经集成好了.我们引用就OK. JSON文件hello.json内容 {"pets":["dog","cat"],"stuInfo":{"stuAge":"23","stuName":"zhangsan","birthday":"1990-01-12"},&quo

cocos2d-x-3.0 build不成功

windows上面建立工程,一开始新宿舍没联网,老是不能成功以下内容: cocos run -p TestAndroid -j 4 一直build failed.内容大致是ant里面build文件284句出了问题~~ 过了会儿来一个有wifi的地方,刚想看看是什么错误,结果以上那句直接就可以通过了....究竟是怎么回事呢?不太清楚~~ cocos2d-x-3.0 build不成功,布布扣,bubuko.com

c++ 基础学习: 左值 概念cocos2d-x3.0的实际应用

左值:概念baidu 1.2.6.2 与Cocos2d-x内存管理的结合 在2.x的使用场景中,CCArray和CCDictionary通常被分配在堆上,我们不得不需要考虑在适当的地方释放其内存.新的容器类不再继承自Ref(2.x中的CCObject),新的容器类通常应该被分配在栈上来使用,这简化了内存管理,我们应该将精力放在容器元素而不是容器本身的内存管理上. Vector中的T和Map<K,V>中的V必须是Ref类型,因为它们需要结合Cocos2d-x的内存管理方式一起工作.这简化了容器中

Cocos2d-x3.0 解压zip

2dx3.0为我们集成了unzip库,帮助我们实现对文件的解压,但使用起来略显复杂我这里封装了一个解压工具库.分享一下. 工具类下载:http://download.csdn.net/detail/qqmcy/7288151 先引入头文件 #include "DJZipArchive.h" 实现解压代码 //获取文件路径 const char* file_path = FileUtils::getInstance()->fullPathForFilename("hell

cocos2d-x3.0 ListView

.h #include "cocos2d.h" #include "cocos-ext.h" #include "ui/CocosGUI.h" #include "cocostudio/CocoStudio.h" USING_NS_CC; USING_NS_CC_EXT; using namespace ui; void selectedItemEvent(Ref *pSender, ListViewEventType typ