cocos2d-x 2.2.0 图片选中聚焦 ,图片描边 CCClippingNode 实现
来源:互联网 发布:李善兰 知乎 编辑:程序博客网 时间:2024/04/30 05:07
效果如下图
左边箭头是x方向翻转的,右边箭头有旋转和缩放action。大概实现方法:用箭头作为遮罩层,底图是一个绘制的矩形,得到一个黄色箭头背景。在用schedule跟随要聚焦箭头动作。这个在电视端用遥控器上下左右选择聚焦有点用。希望这个是对同学们有帮助,谢谢。
代码
#include "HelloWorldScene.h"USING_NS_CC;CCScene* HelloWorld::scene(){ // 'scene' is an autorelease object CCScene *scene = CCScene::create(); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCSprite *stencil = CCSprite::create("f1.png"); stencil->setFlipX(true); CCClippingNode *clipper = CCClippingNode::create(); clipper->setAlphaThreshold(0.005f); clipper->setAnchorPoint(ccp(0.5, 0.5)); clipper->setPosition( ccp(visibleSize.width / 2 - 50, visibleSize.height / 2 - 50) ); clipper->setStencil(stencil); this->addChild(clipper,0,cliper_tag); CCNode *content = shape(stencil->getContentSize()); clipper->addChild(content,0,content_tag); CCSprite *updata = CCSprite::create("f1.png"); updata->setFlipX(true); updata->setPosition( ccp(visibleSize.width / 2 - 50, visibleSize.height / 2 - 50) ); this->addChild(updata,1,spr1_tag); CCSprite *updata2 = CCSprite::create("f2.png"); updata2->setPosition( ccp(visibleSize.width / 2 + 50, visibleSize.height / 2 - 50) ); updata2->runAction(CCRepeatForever::create(CCSequence::create(CCScaleTo::create(0.5, 1.3),CCRotateBy::create(2, 90),CCScaleTo::create(0.5, 1),NULL))); this->addChild(updata2,1,spr2_tag); this->setTouchEnabled(true); return true;}CCDrawNode* HelloWorld::shape(CCSize size){ CCDrawNode *shape = CCDrawNode::create(); static CCPoint shapedate[4]; shapedate[0] = ccp(-(size.width / 2), -(size.height / 2)); shapedate[1] = ccp((size.width / 2), -(size.height / 2)); shapedate[2] = ccp((size.width / 2), (size.height / 2)); shapedate[3] = ccp(-(size.width / 2), (size.height / 2)); static ccColor4F yellow = {1, 1, 0, 1}; shape->drawPolygon(shapedate, 4, yellow, 0, yellow); return shape;}void HelloWorld::setshaper(int tag){ this->unschedule(schedule_selector(HelloWorld::cliperupdate)); current_tag = tag; CCSprite* sp = (CCSprite*) this->getChildByTag(tag); CCClippingNode *clipper = (CCClippingNode*)this->getChildByTag(cliper_tag); CCSprite *stencil = CCSprite::createWithTexture(sp->getTexture()); stencil->setFlipX(sp->isFlipX()); stencil->setFlipY(sp->isFlipY()); stencil->setScale(sp->getScale()); stencil->setRotation(sp->getRotation()); clipper->setStencil(stencil); clipper->setPosition(sp->getPosition()); clipper->removeChildByTag(content_tag); clipper->addChild(shape(sp->getContentSize()),0,content_tag); this->schedule(schedule_selector(HelloWorld::cliperupdate), 0.05); }void HelloWorld::cliperupdate(float dt){ CCSprite* sp = (CCSprite*) this->getChildByTag(current_tag); CCClippingNode *clipper = (CCClippingNode*)this->getChildByTag(cliper_tag); clipper->setPosition(sp->getPosition()); CCSprite *stencil = (CCSprite*)clipper->getStencil(); stencil->setFlipX(sp->isFlipX()); stencil->setFlipY(sp->isFlipY()); stencil->setScale(sp->getScale()); stencil->setRotation(sp->getRotation()); CCSprite *content = (CCSprite*)clipper->getChildByTag(content_tag); content->setScale(sp->getScale()); content->setRotation(sp->getRotation()); }bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ CCPoint location = this->convertTouchToNodeSpace(pTouch); if (this->getChildByTag(spr1_tag)->boundingBox().containsPoint(location)) { setshaper(spr1_tag); } if (this->getChildByTag(spr2_tag)->boundingBox().containsPoint(location)) { setshaper(spr2_tag); } return true; }void HelloWorld::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ }void HelloWorld::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ }void HelloWorld::registerWithTouchDispatcher(void){ CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);}void HelloWorld::onEnter(){ CCLayer::onEnter();}void HelloWorld::onExit(){ CCLayer::onExit();}void HelloWorld::menuCloseCallback(CCObject* pSender){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");#else CCDirector::sharedDirector()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif#endif}
demo工程在这里下载 狂点我
0 0
- cocos2d-x 2.2.0 图片选中聚焦 ,图片描边 CCClippingNode 实现
- cocos2d-x利用CCClippingNode实现滚动字幕
- cocos2d-x之CCClippingNode实现滚动字幕
- Cocos2d-x CCClippingNode
- cocos2d-x CCClippingNode遮罩实现手电筒效果
- 解决 cocos2d-x CCClippingNode 无效
- cocos2d-x 实现图片加文字菜单
- COCOS2D-X 实现图片区域内滚动
- cocos2d-x 图片平铺
- Cocos2d-x--绘制图片
- cocos2d-x图片内存
- cocos2d-x 下载图片
- Cocos2d-x启动图片
- 【Cocos2d-x】图片描边的一种比较好的shader实现方法
- 【Cocos2d-x】图片描边的一种比较好的shader实现方法
- cocos2d-x 2.1新特性之CCClippingNode
- cocos2d-x 2.1新特性之CCClippingNode
- cocos2d-x新特性之CCClippingNode
- C# 解压及压缩文件源码
- Git学习之一
- Restlet
- B-树和B+树的应用
- tomcat下配置https环境教程
- cocos2d-x 2.2.0 图片选中聚焦 ,图片描边 CCClippingNode 实现
- JavaSE_35_值传递
- 算法思路(续)
- 设计模式一日一练:装饰者模式(Decorator)
- 又是内存泄漏—”HeartBleed”漏洞及其一种可能的利用思路
- String reorder(一道自定义排序题)
- JavaSE_99_编程惯例
- C05_C语言-指针
- 设计模式一日一练:观察者模式(Observer)