cocos2dx中实现自动消失的消息提示框

Toast是Android系统提供的一种非常好的提示方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何的屏幕空间.

Toast.makeText(this,"Hello!",Toast.LENGTH_SHORT).show();

而在用cocos2dx进行游戏开发中,有时候我们也偶尔会用到这种自动消失到消息提示功能,那我们该如何实现呢?

其实思路很简单,cocos2dx中提供类几种定时器,而对于我们这里要实现到效果,我们可以考虑使用scheduleOnce,设置时间间隔,在执行一次到时候将Tips提示框隐藏或销毁,即可达到我们想要到效果。

具体实现如下:

#ifndef __TIPS_H__
#define __TIPS_H__

#include <string>
#include "cocos2d.h"

USING_NS_CC;

//提示显示位置枚举
enum emShowPos
{
    EM_TIPS_TOP = 0,
    EM_TIPS_CENTER,
    EM_TIPS_BOTTOM,
};


/**
 * @breif 提示框(带自动消失)
 */
class Tips : public Node
{
public:
    /**
     * @breif Tips调用接口
     * @[param] sContent    消息内容
     * @[param] tipsPos     消息显示位置
     * @[param] fShowTime   消息显示持续时间
     */
    static void Show(const std::string &sContent, emShowPos tipsPos = EM_TIPS_TOP, float fShowTime = 2.0f)
    {
        cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();

        //提示框背景
        ui::Scale9Sprite *pBg = ui::Scale9Sprite::create("bg.png", Rect(0, 0, visibleSize.width, 60));
        pBg->setPosition(Vec2(visibleSize.width / 2, visibleSize.height/2));

        //创建消息文本标签控件
        LabelTTF *pTextLabel = LabelTTF::create(sContent.c_str(), "arial", 32, pBg->getContentSize());
        pTextLabel->setAnchorPoint(Vec2(0.5,1));
        pTextLabel->setPosition(Vec2(pBg->getContentSize().width/2, pBg->getContentSize().height));
        pTextLabel->setColor(Color3B(255,0,0));
        pBg->addChild(pTextLabel);

        Tips *pTipsNode = new Tips();
        pTipsNode->addChild(pBg);
        pTipsNode->scheduleOnce(schedule_selector(Tips::onScheduleOnce), fShowTime);

        Scene *pScene = Director::getInstance()->getRunningScene();
        pScene->addChild(pTipsNode);
    }

private:
    void onScheduleOnce(float fDelay)
    {
        this->removeFromParent();
    }
};

上述代码中,我们通过Show方法,传递消息内容,消息显示位置以及消息持续时间来进行Tips的显示控制。这里只是实现来基本的效果,实际使用时,可以再进行相隔需求扩展,例如传递TipImage提示图片参数,从而实现带图片的消息提示框等等。

猜你喜欢

转载自blog.csdn.net/developer1024/article/details/79999094