cocos2d-x c++ 制作一个蒙版类型标题框

来源:互联网 发布:某单位网络拓扑结构图 编辑:程序博客网 时间:2024/05/20 07:54

#include "LessionScene.h"
#include "util/LabelWithStroke.h"

//获得导演

auto director = Director::getInstance();
//获得屏幕尺寸
auto size = director->getVisibleSize();
auto origin = director->getVisibleOrigin();


//预加载背景音乐
SimpleAudioEngine::getInstance()->preloadBackgroundMusic("e:\\media\\content1.wav");


//添加背景精灵层========================begin
auto background = Sprite::create("e:\\lession\\1\\main.png");
if (nullptr != background)
{
//设置精灵层位置居中
background->setPosition(Point(origin.x + size.width / 2, origin.y + size.height / 2));
//设置缩放
Utils::setScale(background);


//设置TAG
background->setTag(LEVEL_BACKGROUND);
//精灵层图片添加到本图层中
this->addChild(background);
}
//添加背景精灵层========================end


//添加按钮==========================begin
//主按钮
auto menuMain = MenuItemImage::create("res/btn/quit_nor.png", "res/btn/quit_click.png"
, CC_CALLBACK_1(LessionScene::menuCallback, this));
//menuMain->setPosition(Point::ZERO);
// menuMain->setTag(MENU_MAIN_TAG);


auto menu = Menu::create(menuMain, NULL);
menu->setPosition(Point(size.width*LESSION_MENU_MAIN_X / DESIGN_BASE_WIDTH
, size.height*LESSION_MENU_MAIN_Y / DESIGN_BASE_HEIGHT));
background->addChild(menu);


//添加按钮==========================end
//设置透明度
//setCascadeColorEnabled(true);//设置父子关联
menu->setOpacity(STD_OPACITY);
background->setOpacity(STD_OPACITY);




//乐理知识标题==================================start
const char* yueliText = Utils::EncodeToUTF8("乐理知识");
//const char* yueliText = "乐理知识";
//标签
/*auto label = Utils::StrokeLabel(Utils::EncodeToUTF8("乐理知识")
, "fonts/simhei.ttf", TITLE_FONT_SIZE, Color3B(1, 1, 1), 2.0f);*/
auto label = LabelWithStroke::create();
label->setLabel(yueliText
, "fonts/simhei.ttf", TITLE_FONT_SIZE, Color4B(255, 255, 255, 255));
label->setStroke(Color4B(1, 1, 1, 255), 2.0f);
/*auto label = Label::create(Utils::EncodeToUTF8("乐理知识"), "fonts/simhei.ttf", TITLE_FONT_SIZE);
label->enableOutline(Color4B(1, 1, 1,200), 2);*/
const Size textSize = label->getContentSize();
//四边形
auto labelDrawNode = DrawNode::create();
//Point point[4];
//point[0] = Vec2(-TITLE_WIDTH/2 * size.width / DESIGN_BASE_WIDTH, TITLE_HEIGHT/2 * size.height / DESIGN_BASE_HEIGHT);
//point[1] = Vec2(TITLE_WIDTH / 2 * size.width / DESIGN_BASE_WIDTH, TITLE_HEIGHT / 2 * size.height / DESIGN_BASE_HEIGHT);
//point[2] = Vec2(TITLE_WIDTH / 2 * size.width / DESIGN_BASE_WIDTH, -TITLE_HEIGHT / 2 * size.height / DESIGN_BASE_HEIGHT);
//point[3] = Vec2(-TITLE_WIDTH / 2 * size.width / DESIGN_BASE_WIDTH, -TITLE_HEIGHT / 2 * size.height / DESIGN_BASE_HEIGHT);
Point pointOrigin = Point(-(textSize.width + TITLE_ADD_WIDTH) / 2 * size.width / DESIGN_BASE_WIDTH
, (textSize.height + TITLE_ADD_HEIGHT) / 2 * size.height / DESIGN_BASE_HEIGHT);
Point pointDest = Point((textSize.width + TITLE_ADD_WIDTH) / 2 * size.width / DESIGN_BASE_WIDTH
, -(textSize.height + TITLE_ADD_HEIGHT) / 2 * size.height / DESIGN_BASE_HEIGHT);


Utils::DrawRoundRect(labelDrawNode, pointOrigin, pointDest, 10
, Color4F(0.398f, 0.398f, 0.398f, 1.0f), 2.0f, Color4F(0.1f, 0.1f, 0.1f, 0.8f));


////多边形        ('顶点数组' , '顶点个数' , '填充颜色' , '轮廓粗细' , '轮廓颜色')
//labelDrawNode->drawPolygon(point, 4,Color4F(0.498, 0.498, 0.498, 1), 2.0f, Color4F(1, 1, 1,0.8));
labelDrawNode->setPosition(Point(size.width / 2, size.height / 2));
this->addChild(labelDrawNode);


//将标题加到框里
labelDrawNode->addChild(label);


//乐理知识标题==================================end




//action=====start
//背景按钮等淡入
Status::SetIntroduce();//设置当前状态
auto seqBG = Sequence::create(DelayTime::create(2.0f), FadeIn::create(1.0f), nullptr);
auto seqMENU = seqBG->clone();
//标签淡出
//auto spawnLabel = Spawn::create(FadeOut::create(1.0f), callFunc,nullptr);
//auto seqLabel = Sequence::create(DelayTime::create(2.0f), spawnLabel, nullptr);
//这里要给4个描边都加淡出效果
auto seqLabel = Sequence::create(DelayTime::create(2.0f), FadeOut::create(1.0f), nullptr);
auto seqLabelNode = Sequence::create(DelayTime::create(2.0f), FadeOut::create(1.0f), nullptr);
//action结束后的释放资源====start
auto callFunc = CallFunc::create(
// lambda
[label, labelDrawNode]() {
label->removeCenter();
//label->removeStroke();
labelDrawNode->removeFromParentAndCleanup(true);
Status::Stop();//修改当前状态
});
//action结束后的释放资源====end
//单独给中心文字一个动作--移除文字


auto seqCenter = Sequence::create(DelayTime::create(2.0f), DelayTime::create(1.0f), callFunc, nullptr);


background->runAction(seqBG);// 透明度通过fadein变回来
menu->runAction(seqMENU);//透明度fadein变回来


label->runAction(seqLabel, seqCenter);
labelDrawNode->runAction(seqLabelNode);


//action=====end
阅读全文
0 0
原创粉丝点击