加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx3.0 打飞机

发布时间:2020-12-14 17:08:59 所属栏目:百科 来源:网络整理
导读:cocos2dx3.0 + vs2013 简单打飞机游戏 本文地址:http://www.jb51.cc/article/p-kzfawcay-wk.html 游戏资源,借用了微信打飞机的图库 初版源码地址:https://github.com/doctording/cocos2dx_plane_cpp 滚动背景问题: 持续按键,执行动作 例如:需要移动时

cocos2dx3.0 + vs2013 简单打飞机游戏
本文地址:http://www.52php.cn/article/p-kzfawcay-wk.html


游戏资源,借用了微信打飞机的图库
初版源码地址: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读