Cocos2d-x 3.0 实现android的Toast效果

一直觉得用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));

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值