设为首页 加入收藏

TOP

Cocos2D-X闪亮标题实现(一)
2015-02-02 14:26:36 来源: 作者: 【 】 浏览:13
Tags:Cocos2D-X 闪亮 标题 实现

Cocos2D-X闪亮标题实现最终效果图:



实现方法:


主要依懒ClippingNode类


需要的素材有:


显示标题,又作为stencil(模板)



光束(beam)....就是纯白色加点透明....可能看不出来



代码实现


1.添加标题


//标题
?auto title = Sprite::create("BeamTitle/title.png");
?title->setAnchorPoint(Vec2(0.5f, 0.5f));
?title->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 6 * 5));
?this->addChild(title);


2,加ClippingNode


?


ClippingNode需要设置三个内容


模板(Node *类型),这里是标题,第一张图,不会被显示


显示目标(ClippingNode 的子节点),这里是光束,第二张图


设置AlphaThresHold的值,简单点的说就是透明度,只有当模板透明度大于这个值时,显示目标才会绘制


//clippingNode
?auto titleStencil = Sprite::create("BeamTitle/title.png");
?auto clipTitle = ClippingNode::create(titleStencil);
?clipTitle->setAnchorPoint(Vec2(0.5f, 0.5f));
?clipTitle->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 6 * 5));
?clipTitle->setAlphaThreshold(0.0f);
?this->addChild(clipTitle);
?//Beam 光束
?auto beam = Sprite::create("BeamTitle/beam.png");
?beam->setAnchorPoint(Vec2(0.5f, 0.5f));
?auto toRight = MoveTo::create(0.5f, Vec2(200, 50));
?auto toLeft = MoveTo::create(0.5f, Vec2(-200, 50));
?auto seq = Sequence::create(toRight, toLeft, nullptr);
?auto move = RepeatForever::create(seq);
?beam->runAction(move);
?clipTitle->addChild(beam);


代码中,ClippingNode的AlphaThresHold值被设置为0.0f,标题的完全透明部分的透明度也为0.0f.所以beam在透明部分不会被显示。


额外例子


最下面的滚动条是用来设置AlphaThresHold


中间使用的模板是


Cocos2D-X闪亮标题实现


增加AlphaThresHold的值,图片显示的内容越来越少。


完整代码


BeamTitle.h


#ifndef __BEAM__TITLE__CPP__
#define? __BEAM__TITLE__CPP__
#include "cocos2d.h"
#include "ui/UISlider.h"
class BeamTitle :public cocos2d::Layer{
public:
?/*
? *三个构造相关函数
? */
?static cocos2d::Scene* createScene();
?CREATE_FUNC(BeamTitle);
?bool init();
private:
?/*
? *滑动条函数
? */
?void sliderEvent(cocos2d::Ref *pSender, cocos2d::ui::Slider::EventType type);
private:
?cocos2d::ClippingNode *clip;
?cocos2d::Label *label;
};
#endif


BeamTitle.cpp


#include "BeamTitle.h"
#include "BackLayer.h"
#include "ui/UISlider.h"
USING_NS_CC;
using namespace ui;
Scene *BeamTitle::createScene(){
?auto *back = BackLayer::create();
?Layer *layer = BeamTitle::create();
?Scene*scene = Scene::create();
?scene->addChild(back);
?scene->addChild(layer);
?return scene;
}
bool BeamTitle::init(){
?if (!Layer::init())
? return false;
?auto visibleSize = Director::getInstance()->getVisibleSize();
?//标题
?auto title = Sprite::create("BeamTitle/title.png");
?title->setAnchorPoint(Vec2(0.5f, 0.5f));
?title->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 6 * 5));
?this->addChild(title);
?//clippingNode
?auto titleStencil = Sprite::create("BeamTitle/title.png");
?auto clipTitle = ClippingNode::create(titleStencil);
?clipTitle->setAnchorPoint(Vec2(0.5f, 0.5f));
?clipTitle->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 6 * 5));
?clipTitle->setAlphaThreshold(0.0f);
?this->addChild(clipTitle);
?//Beam 光束
?auto beam = Sprite::create("BeamTitle/beam.png");
?beam->setAnchorPoint(Vec2(0.5f, 0.5f));
?auto toRight = MoveTo::create(0.5f, Vec2(200, 50));
?auto toLeft = MoveTo::create(0.5f, Vec2(-200, 50));
?auto seq = Sequence::create(toRight, toLeft, nullptr);
?auto move = RepeatForever::create(seq);
?beam->runAction(move);
?clipTitle->addChild(beam);
?//滑动条
?auto slider = Slider::create();
?slider->loadBarTexture("BeamTitle/sliderTrack.png");
?slider->loadProgressBarTexture("BeamTitle/sliderProgress.png");
?sli

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用Python 40行代码编写的计算器 下一篇Python版简易计算器的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: