cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建

一、创建文件~

PlayerLayer.h

PlayerLayer.cpp

一般类名都会和文件名有关系的~(在这里当然是一样)

二、How to do?

1、首先就是放一个飞机~

CC_SYNTHESIZE(bool, _isAlive, isAlive);

Sprite *_playerplane;
 
void createPlayerPlane();

(1)额,首先就是先定义一个_isAlive变量,用来表示飞机是否活着。

PlayerLayer::PlayerLayer()
{
    _isAlive = false;                //首先初始化~
}

(2)完善createPlayerPlane()

void PlayerLayer::createPlayerPlane()
{
    auto visibleSize = Director::getInstance()->getVisibleSize();
    auto origin = Director::getInstance()->getVisibleOrigin();
           //首先就是获得屏幕的初始点以及屏幕的大小
 
    _playerplane = Sprite::createWithSpriteFrameName("hero1.png");
    _playerplane->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + _playerplane->getContentSize().height / 2));
    this->addChild(_playerplane, 0, PLAYER_TAG);
           //创建飞机的图片,然后设置下图片

    Blink *blink = Blink::create(1, 3);//出来的时候闪一闪,比较帅~

    Animation* animation = Animation::create();
    animation->setDelayPerUnit(0.08f);
    animation->addSpriteFrame(SpriteFrameCache::getInstance()->spriteFrameByName("hero1.png"));
    animation->addSpriteFrame(SpriteFrameCache::getInstance()->spriteFrameByName("hero2.png"));
    Animate* animate = Animate::create(animation);
                       //然后加入一个帧动画,就是不断的喷火~
 
    _playerplane->runAction(blink);
    _playerplane->runAction(RepeatForever::create(animate));  //这个就是重复的播放喷火的动画。
    _isAlive = true;             //表示飞机活着~
}

(3)加入场景

a、 首先在PlayerLayer中调用

this->createPlayerPlane();

b、然后把这个层加入到GameScene,就是加入到那个initLayer的函数中

然后先放图~

但是你会发现根本动不了~所以呢,不要急,等等就加入一下触摸的控制,当然我承认我的这个层做的很不完善,当在做子弹层的时候就会明白的~。

2、加入触摸控制

(1)完成触摸函数

virtual bool onTouchBegan(Touch *touch, Event *unused_event);
virtual void onTouchMoved(Touch *touch, Event *unused_event);

这里就需要使用那个cocos封装好的触摸控制,所以我们要先了解一下,在这里我们主要就是使用上面的两个继承下来的函数,从名字来看,Began就是监测是否点到屏幕上,然后Moved就是现在滑动屏幕的作用,然后还有那个结束触摸的那一点之类的。

现在就让我们实现下这两个函数吧~

bool PlayerLayer::onTouchBegan(Touch *touch, Event *unused_event)
{
    return true;
    //当监测到触摸时(鼠标就是点击),然后返回true后,才会继续执行Moved的函数。
}

void PlayerLayer::onTouchMoved(Touch *touch, Event *unused_event)
{
    if (_isAlive)                  //活着的时候才能进行滑动~挂掉的话,你划个屁屁~
    {
        Vec2 beginPoint = touch->getLocation();   //得到刚触摸到的点

        Rect planeRect = _playerplane->boundingBox();     //得到飞机所在的区域

        planeRect.origin.x -= 15;
        planeRect.origin.y -= 15;
        planeRect.size.width += 30;
        planeRect.size.height += 30;               //把区域加大点,方便手的触摸

        if (planeRect.containsPoint(beginPoint))      //如果摸到飞机,就可以进行滑动~
        {
            Vec2 endPoint = touch->getPreviousLocation();
            Vec2 offSet = ccpSub(beginPoint, endPoint);
            Vec2 toPoint = ccpAdd(_playerplane->getPosition(), offSet);
            this->MoveTo(toPoint);
        }
    }
}

(2)将触摸加入监听~

    auto touchListenr = EventListenerTouchOneByOne::create();
                                          //touchListenr就是监听触摸的cocos封装的功能
    touchListenr->onTouchBegan = CC_CALLBACK_2(PlayerLayer::onTouchBegan, this);
 
                                          //加入Began
    touchListenr->onTouchMoved = CC_CALLBACK_2(PlayerLayer::onTouchMoved, this);
                                         
                                         //加入Moved
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListenr, this);
                                         //加入监听器~这个详情就得去看官网的教程啦~

然后放不了图了,大家就默默的自己暗爽吧~

时间: 2024-10-12 06:38:01

cocos2dx游戏开发——微信打飞机学习笔记(六)——PlayerLayer的搭建的相关文章

cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何划分好游戏的场景,是开始动手做游戏的第一步. 3.一个场景会有很多层,用来处理场景不同的功能. 4.而精灵则是最小的单位,比如子弹,飞机,敌机都是一个个的精灵所组成的.   二.WelcomeScene的搭建: 1.场景和层的二种搭建方法: (1)一种就是跟HelloWorld示例一样的方法,以一个

cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架

一.游戏的基本框架: WelcomeScene    ——>    GameScene   ——>   GameOverScene ||                                       ||                                    || ∨                                      ∨                                   ∨ WelcomeLayer            

cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x GitHub主页中克隆Develop分支:https://github.com/cocos2d/cocos2d-x •配置Python 2.7 环境:http://www.python.org/download/releases/ •建议IDE:Visual Studio 2013 •运行cocos2

cocos2dx游戏开发——微信打飞机学习笔记(五)——BackgroundLayer的搭建

一.创建文件~        文件名:BackgroundLayer.h                      BackgroundLayer.cpp        架构就跟前面的一样,我就直接进入正题 啦,而且github有完整代码,欢迎下载~ 二.创建滚动的背景        为毛要创建滚动的背景呢= =,因为我们要控制飞机,但总得有往前飞的感觉,所以呢~你懂的~ 然后方法就很简单啦,就是用2张图片,当然是上下能对接起来的那种,然后不停的滚那滚就好啦~ 方法呢,首先在.h文件中进行声明

cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建

一.七说八说        大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教程中我们一步步的进行完善的说~. 二.子弹与灰机的碰撞检测 (1)加入爆炸的动画~(加到EnemyLayer中) a.通用的敌人爆炸动画的创建函数~ Animate* EnemyLayer::playAnimation(std::string formatstring, int count) { a

cocos2dx游戏开发——微信打飞机学习笔记(九)——BulletLayer的搭建

一.创建文件~          BulletLayer.h          BulletLayer.cpp 二.How to do? (1)实例化BulletLayer方法的实现~ Bullet(PlayerLayer* temp); ~Bullet(); static Bullet* create(PlayerLayer *temp);           大家发现这个bullet类的实例化方法很奇怪~,那是由于小白前面制作PlayerLayer的时候没有把他做成全局变量,所以bullet

cocos2dx游戏开发——微信打飞机学习笔记(十一)——GameOverScene的搭建

一.创建文件~          GameOverScene.h          GameOverScene.cpp          GameOverLayer.h          GameOverLayer.cpp 二.How to do?         就是加入一个转场就好~转到GameOverScene,然后我们先简单实现下GameOverScene (1)搭建GameOverScene            由于我们结束场景是一个计分板,所以我们需要在创建场景的时候需要传入一个_

cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建

一.创建文件        首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和GameScene.cpp       简单来说就是先搭建一个空的场景,为了以后一些游戏主题的层做一个容器,然后我们应该怎么处理呢? 然后呢--先贴代码~ //GameScene.h #ifndef WeiXinDaPlane_GAME_SCENE_H__ #define WeiXin

《LUA游戏开发实践指南》学习笔记1

本文只做个人学习笔记! Lua脚本语言的优点:免费.小巧.快速和易移植. 游戏项目中的Lua,可以完成以下工作 编辑游戏用户界面(玩家和你的游戏进行交互的媒介) 定义.存储和管理游戏数据(Lua本人并没有直接访问外部数据库的能力,但可以使用C++组件) 管理游戏实时事件 创建和维护开发者有好的游戏存储和载入系统 编写游戏的人工智能(AI) 创建功能原型,可以之后用高性能语言移植 Lua入门 Lua控制台 lua脚本(扩展名为.lua的文本文本) 代码块(Chunk):单个命令或者一系列命令组成脚