【cocos2dx 3.2制作Flappy Bird实践6】创建Guide玩法指导层

2015年03月17日 16:45 0 点赞 0 评论 更新于 2017-05-09 14:43

实现步骤

  1. 导入readyTitleguideSprite
  2. 设置点击监听事件
  3. 点击触发时从场景移除这两个元素
  4. 将其添加到GameScene

代码实现

Guide.h

#pragma once
#include "cocos2d.h"
USING_NS_CC;

class Guide : public Layer {
public:
Guide(void);
~Guide(void);
virtual bool init();
CREATE_FUNC(Guide);
void rmGuide();

private:
EventListenerTouchOneByOne * listener;
Sprite * title;
Sprite * guide;
};

Guide.cpp

#include "Guide.h"
USING_NS_CC;

Guide::Guide(void) {
// 构造函数,目前为空
}

Guide::~Guide(void) {
// 析构函数,目前为空
}

bool Guide::init() {
if (!Layer::init()) {
return false;
}

auto origin = Director::getInstance()->getVisibleOrigin();
auto visibleSize = Director::getInstance()->getVisibleSize();

// Ready标题
title = Sprite::createWithSpriteFrameName("text_ready.png");
title->setPosition(Vec2(origin.x + visibleSize.width * 0.5, origin.y + visibleSize.height * 0.8));
this->addChild(title);

// 玩法提示
guide = Sprite::createWithSpriteFrameName("tutorial.png");
guide->setPosition(Vec2(origin.x + visibleSize.width * 0.5, origin.y + visibleSize.height * 0.4));
this->addChild(guide);

listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [=](Touch * t, Event * e) {
return true;
};

listener->onTouchEnded = [=](Touch *t, Event * e) {
_eventDispatcher->removeEventListener(listener);
auto fade = FadeOut::create(0.5f);
auto fade_2 = FadeOut::create(0.5f);

// 淡出之后,回调删除函数,从场景移除这2个对象
auto callback = CallFuncN::create(CC_CALLBACK_0(Guide::rmGuide, this));
auto sequence = Sequence::create(fade, callback, nullptr);
guide->runAction(sequence);
title->runAction(fade_2);
};

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}

// 移除这2个元素
void Guide::rmGuide() {
this->removeChild(title);
this->removeChild(guide);
}

代码解释

  1. Guide.h文件:定义了Guide类,继承自Layer。声明了构造函数、析构函数、init函数用于初始化层,CREATE_FUNC宏用于快速创建对象,rmGuide函数用于移除titleguide元素。同时,定义了私有成员变量listener用于处理触摸事件,titleguide用于存储对应的Sprite对象。
  2. Guide.cpp文件
    • 构造函数和析构函数:目前为空,可根据需要添加资源初始化和释放的代码。
    • init函数:首先调用父类的init函数进行初始化,如果失败则返回false。接着获取可见区域的原点和大小,创建titleguideSprite对象,并设置它们的位置,添加到当前层中。然后创建触摸事件监听器,处理触摸开始和结束事件。在触摸结束事件中,移除事件监听器,创建淡出动画,并在动画结束后回调rmGuide函数移除titleguide元素。
    • rmGuide函数:从当前层中移除titleguide元素。

通过以上步骤和代码,我们实现了一个玩法指导层,用户点击后该层元素会淡出并移除。

作者信息

menghao

menghao

共发布了 332 篇文章