转自:http://blog.csdn.net/star530/article/details/20851263

本篇介绍的是用ClippingNode 做游戏的新手引导,额,或者说是做新手引导的一种可尝试的方式。
ClippingNode的解释,我盗用Jacky的话来说就是:
CCClipingNode是一个可裁剪节点,简单理解:
(1)首先它是一个节点,继承于CCNode,所以它可以像普通节点一样放入CCLayer,CCScene,CCNode中。
(2)作为节点,它就可以用作容器,承载其他节点和精灵。我把它叫底板。
(3)如果想要对一个节点进行裁剪,那需要给出裁剪的部分,这个裁剪区域,我把它叫模版。
所以CCClipingNode裁剪节点在组成上=底板+模版,而在显示上=底板-模版。不知道这样解释会不会好理解一点。

具体的用法,请看大屏幕:

1、假如游戏的开始,游戏界面就只有一个button,点击它可以显示出“Welcome to star blog!”,代码实现如下:

  1. Size visibleSize = Director::getInstance()->getVisibleSize();
  2. Point origin = Director::getInstance()->getVisibleOrigin();
  3.  
  4. auto closeItem = MenuItemImage::create(
  5. "CloseNormal.png",
  6. "CloseSelected.png",
  7. CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
  8.  
  9. closeItem->setPosition(Point(,));
  10. closeItem->setTag();//这里设置item的tag,方便其他地方获取到这个item
  11.  
  12. auto menu = Menu::create(closeItem, NULL);
  13. menu->setPosition(Point::ZERO);
  14. menu->setTag();//这里同样设置tag 为99
  15. this->addChild(menu, );
  16. //它的回调函数是点击这个button后,会出现一行字:Welcome to star blog!。
  17. void HelloWorld::menuCloseCallback(Object* pSender)
  18. {
  19. auto _lable = LabelTTF::create("Welcome to star blog!","Arial",);
  20. _lable->setPosition(Point(,));
  21. this->addChild(_lable,);
  22. }

效果如图所示:

 

2、然后添加ClippingNode:

  1. auto clip = ClippingNode::create();//设置裁剪节点
  2. clip->setInverted(true);//设置底板可见
  3. clip->setAlphaThreshold(0.0f);//设置透明度Alpha值为0
  4. this->addChild(clip,);
  5.  
  6. auto layerColor = LayerColor::create(Color4B(,,,));
  7. clip->addChild(layerColor,);//在裁剪节点添加一个灰色的透明层
  8.  
  9. //创建模板,也就是你要在裁剪节点上挖出来的那个”洞“是什么形状的,这里我用close的图标来作为模板
  10. auto nodef = Node::create();//创建模版
  11. auto close = Sprite::create("CloseSelected.png");//这里使用的是close的那个图标
  12. nodef->addChild(close);//在模版上添加精灵
  13. nodef->setPosition(Point(,));//设置的坐标正好是在close button的坐标位置上
  14. clip->setStencil(nodef);//设置模版

clippingNode的用法注释已经写得很清楚啦,我就不再一一解释。使用clippingNode后,效果如图所示,我特意添加了一个用close图标做的精灵,方便对比。

3、这个时候,场景中的close按钮是高亮的,点击close按钮也是可以响应的,但是假设我界面上有许多按钮,它们也都是可以响应,如果我只想让玩家点击close按钮,其他按钮不能用,那该怎么做?(总有那么些”调皮“的玩家不按常理出牌)。方法很简单,就是添加一个覆盖整个屏幕的空白按钮。

  1. auto blackItem = MenuItem::create();
  2. blackItem->setPosition(visibleSize.width/,visibleSize.height/);
  3. blackItem->setContentSize(visibleSize);//设置大小为整个屏幕的大小
  4.  
  5. auto blackMenu = Menu::create(blackItem,NULL);
  6. blackMenu->setPosition(Point::ZERO);
  7. blackMenu->setAnchorPoint(Point::ZERO);
  8. this->addChild(blackMenu,);

这样点击按钮就无法响应了,因为在按钮上还覆盖着一个霸道的空白按钮。可是...现在连close 按钮都点击不了。怎么就这么麻烦?还能不能一起快乐的玩耍了?!看来只能出大招了,把触摸监听事件扯出来。我在场景的最上方添加一个layer(注意是最上方,如果是在空白按钮的下面,那么就触摸不到layer了),当玩家手指触摸到屏幕,我通过判断触摸的位置判断是否在close 按钮上,如果是的话,手动的响应close  按钮。

  1. auto listen_layer = Layer::create();//首先在场景的最上方再添加一个layer
  2. this->addChild(listen_layer,);//zOrder设置为200,反正能在最上方就好
  3.  
  4. auto listener = EventListenerTouchOneByOne::create();//创建一个触摸监听(单点触摸)
  5. listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
  6. _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,listen_layer);//将listener和layer绑定,放入事件委托中
  7.  
  8. bool HelloWorld::onTouchBegan(Touch* touch, Event *event)
  9. {
  10. auto point = Director::getInstance()->convertToGL(touch->getLocationInView());//获得当前触摸的坐标
  11. auto rect = Rect(-,-,,);//设置框坐标和大小处于close 按钮的位置上
  12.  
  13. if(rect.containsPoint(point))//如果触点处于rect中
  14. {
  15. auto menu = (Menu*)this->getChildByTag();//通过tag获取到menu
  16. auto item = (MenuItem*)menu->getChildByTag();//通过tag从menu中获取item
  17. item->activate();//让item响应
  18. }
  19.  
  20. return true;//返回true表示接收触摸事件
  21. }

cocos2dx 3.0 用ClippingNode做游戏的新手引导的更多相关文章

  1. cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详解献给刚開始学习的人们!

    原代码来自于网络,因为cocos2d-x 3.0的资料,的确不多,与曾经版本号的接口非常难对上, 所以网上非常多样例都无法调试,对于新学习cocos2d-x 的同学,难度添加了,所以出一个超具体的样例 ...

  2. Cocos2d-x 3.0修改Android平台帧率fps - 解决游戏运行手机发热发烫问题

    使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高. 做过coco ...

  3. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源代码放送

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  4. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第七步---英雄要升级&属性--解析csv配置文件

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...

  5. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  6. [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 004.[HoldTail]主角的上下飞行跟移动

    cocos2d-x 3.0游戏开发xcode5帅印博客教学 004.[HoldTail]主角的上下飞行跟移动 写给大家的前言,在学习cocos2d-x的时候自己走了很多的弯路,也遇到了很多很多问题,不 ...

  7. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第八部---怪物出场

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...

  8. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第二步---编辑器(1)--触摸加入点

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写,第一别全然照搬代码:第二能够说 ...

  9. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面

    说明:这里是平局:晓风残月前辈的博客.他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

随机推荐

  1. PHP下最好用的富文本HTML过滤器:HTMLPurifier使用教程

    HTMLPurifier是我目前用过最好的PHP富文本HTML过滤器了,采用了白名单机制,有效杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击! HTMLPurifier项目地址:htt ...

  2. 用HttpClient模拟HTTP的GET和POST请求(转)

    本文转自:http://blog.csdn.net/xiazdong/article/details/7724349 一.HttpClient介绍   HttpClient是用来模拟HTTP请求的,其 ...

  3. 关于一致/非一致代码段与TSS 关系的个人看法

    [0]概念定义 0.1)一致代码段: 简单理解,就是操作系统拿出来被共享的代码段,可以被低特权级的用户直接调用访问的代码, 但是特权级高的程序不允许访问特权级低的数据. 通常这些共享代码,是" ...

  4. pulsar学习笔记1:helloworld

    pulsar号称是下一代的消息系统,这二年风光无限,大有干掉kafka的势头,如果想快速体验下,可以按以下步骤在本地搭建一个单机版本:(mac环境+jdk8) 一. 下载 wget https://w ...

  5. 转载 ---原生和H5交互挺多的,最近也有朋友再问。这儿我写个简单的例子给大家 直接贴代码 js的

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> ...

  6. Fragment 懒加载

    我们在遇到Activity嵌套Fragment的时候经常会遇到多个Fragment页面同时加载数据,一开始的时候就初始化很多页面,有的甚至进入页面的时候,会造成缓慢的现象,下面我们就针对这个问题做一下 ...

  7. 内存MCE错误导致暴力扩充messages日志 以及chattr记录

    由于放假,好久没登过服务器,今天登上服务器查看日志意外发现:/var/log/messages文件竟然被撑到20多个G!!!赶紧查看是什么情况,首先,20多个G的文件根本无法查看,因此,我想到了spl ...

  8. css多余字符显示省略号

    width:300px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; ;

  9. matlab实战中一些重要的函数总结

    这段时间看了一些大型的matlabproject文件(如:faster r-cnn),对于project中常常要用到的一些函数进行一个总结. 1.路径问题. 这主要涵括文件路径的包括和组合. curd ...

  10. PAT天梯赛 L2-002. 链表去重 【STL】

    题目链接 https://www.patest.cn/contests/gplt/L2-002 思路 用结构体 存储 一个结点的地址 值 和下一个地址 然后从首地址开始 往下走 并且每个值的绝对值 都 ...