一直觉得用Android中的Toast效果来向用户显示一些提示/帮助是一种比较好的方式。
正好目前项目中要用到该效果,所以自己实现了一次。主要使用到 FadeIn和 FadeOut
GameToast.h
// GameToast.h
//
// Created by Cy、 on 14-8-7.
//
#ifndef __OpenCamera__GameToast__
#define __OpenCamera__GameToast__
#include "cocos2d.h"
class GameToast :public cocos2d::Layer
{
public:
GameToast();
~GameToast();
static void showToast(cocos2d::Node* node,std::string showMsg,float dt);
CREATE_FUNC(GameToast);
};
#endif /* defined(__OpenCamera__GameToast__) */
GameToast.cpp
//
// GameToast.cpp
// OpenCamera
//
// Created by Cy、 on 14-8-7.
//
//
#include "GameToast.h"
USING_NS_CC;
GameToast::GameToast(){}
GameToast::~GameToast(){}
voidGameToast::showToast(Node* node,std::string showMsg,float dt )
{
Size visibleSize =Director::getInstance()->getVisibleSize();
Point origin =Director::getInstance()->getVisibleOrigin();
//创建Toast的背景
Sprite* bg = Sprite::create("toast_bg.png");
bg->setPosition(Point(origin.x+visibleSize.width/2,visibleSize.height/4));
bg->setOpacity(0);
//显示文字
// Label * wzLabel = Label::createWithSystemFont(showMsg.c_str(), "Arial", 25);
//由于3.0版本中 Label setOpacity无效 听说在3.1中已经修复。 因此使用创建一张纹理(使用字符串来初始化这张Texture2D纹理)然后使用Sprite来控制纹理显示。
Texture2D * tex =new Texture2D();
tex->initWithString(showMsg.c_str(),"Arial", 25);
Sprite * msgSp =Sprite::createWithTexture(tex);
msgSp->setOpacity(0);
//设置颜色
msgSp->setColor(Color3B::WHITE);
bg->addChild(msgSp, 1);
//这里自行调整
node->addChild(bg,20);
//将文字设置于显示背景的中间
msgSp->setPosition(Point(bg->getContentSize().width/2,bg->getContentSize().height/2));
//渐入停留 渐出 3个动作的时间可自己调整
msgSp->runAction(Sequence::create(FadeIn::create(dt/3),
DelayTime::create(dt/3),FadeOut::create(dt/3),NULL));
CallFunc * removeFunc = CallFunc::create([=]{
tex->release();
bg->removeAllChildrenWithCleanup(true);
});
bg->runAction(Sequence::create(FadeIn::create(dt/3),
DelayTime::create(dt/3),FadeOut::create(dt/3),
removeFunc,
NULL));
}