cocos2dx中实现自动消失的消息提示框
程序员文章站
2024-03-25 19:08:46
...
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提示图片参数,从而实现带图片的消息提示框等等。
上一篇: Sprite 3D用法和相关特性详解
下一篇: cocos create 计算扫雷3BV