cocos2dx 3.0 用ClippingNode做游戏的新手引导

转自: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!”,代码实现如下:

Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();

auto closeItem = MenuItemImage::create(
                                       "CloseNormal.png",
                                       "CloseSelected.png",
                                       CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

closeItem->setPosition(Point(160,400));
closeItem->setTag(99);//这里设置item的tag,方便其他地方获取到这个item

auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Point::ZERO);
menu->setTag(99);//这里同样设置tag 为99
this->addChild(menu, 2);
//它的回调函数是点击这个button后,会出现一行字:Welcome to star blog!。
void HelloWorld::menuCloseCallback(Object* pSender)
{
    auto _lable = LabelTTF::create("Welcome to star blog!","Arial",25);
    _lable->setPosition(Point(160,300));
    this->addChild(_lable,2);
}

效果如图所示:

 

2、然后添加ClippingNode:

auto clip = ClippingNode::create();//设置裁剪节点
clip->setInverted(true);//设置底板可见
clip->setAlphaThreshold(0.0f);//设置透明度Alpha值为0
this->addChild(clip,10);

auto layerColor = LayerColor::create(Color4B(0,0,0,150));
clip->addChild(layerColor,1);//在裁剪节点添加一个灰色的透明层

//创建模板,也就是你要在裁剪节点上挖出来的那个”洞“是什么形状的,这里我用close的图标来作为模板
auto nodef = Node::create();//创建模版
auto close = Sprite::create("CloseSelected.png");//这里使用的是close的那个图标
nodef->addChild(close);//在模版上添加精灵
nodef->setPosition(Point(160,400));//设置的坐标正好是在close button的坐标位置上
clip->setStencil(nodef);//设置模版  

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

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

auto blackItem = MenuItem::create();
blackItem->setPosition(visibleSize.width/2,visibleSize.height/2);
blackItem->setContentSize(visibleSize);//设置大小为整个屏幕的大小

auto blackMenu = Menu::create(blackItem,NULL);
blackMenu->setPosition(Point::ZERO);
blackMenu->setAnchorPoint(Point::ZERO);
this->addChild(blackMenu,100);

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

auto listen_layer = Layer::create();//首先在场景的最上方再添加一个layer
this->addChild(listen_layer,200);//zOrder设置为200,反正能在最上方就好

auto listener = EventListenerTouchOneByOne::create();//创建一个触摸监听(单点触摸)
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//指定触摸的回调函数
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,listen_layer);//将listener和layer绑定,放入事件委托中

bool HelloWorld::onTouchBegan(Touch* touch, Event  *event)
{
    auto point = Director::getInstance()->convertToGL(touch->getLocationInView());//获得当前触摸的坐标
    auto rect = Rect(160-30,400-30,60,60);//设置框坐标和大小处于close 按钮的位置上

    if(rect.containsPoint(point))//如果触点处于rect中
    {
        auto menu = (Menu*)this->getChildByTag(99);//通过tag获取到menu
        auto item = (MenuItem*)menu->getChildByTag(99);//通过tag从menu中获取item
        item->activate();//让item响应
    }

    return true;//返回true表示接收触摸事件
}
时间: 2024-08-06 23:45:43

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

ClippingNode做游戏的新手指导

auto stencil=Sprite::create("arrow.png"); stencil->setPosition(btn_right->getPosition()); btn_right = Button::create("arrow.png"); 游戏开发中,很多游戏都会出现新手指导,让玩家熟悉游戏的操作流程. 那做为苦逼的我们,如何实现新手指导?(虽然很苦逼,有时却很快乐-) (1)背景置灰.图标高亮 (2)屏蔽其他图标的点击事件 1.

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

原代码来自于网络,因为cocos2d-x 3.0的资料,的确不多,与曾经版本号的接口非常难对上, 所以网上非常多样例都无法调试,对于新学习cocos2d-x 的同学,难度添加了,所以出一个超具体的样例给大家. 源代码地址:http://download.csdn.net/detail/adady/7293629 #include "HelloWorldScene.h" #include "SimpleAudioEngine.h" USING_NS_CC; Scene

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

使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高. 做过cocos2d开发的同学应该都知道在win32平台修改帧率的方式非常简单,就是在AppDelegate.cpp文件中修改: 1 director->setAnimationInterval(1.0 / 40); 但是这种修改方式在导出android安卓apk到真机测试的时候,发现左下角的调试信息还是现实60

7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已经多次提到 Cocos2d-x 源自于 Cocos2d-iPhone.Cocos2d-iPhone 是一个十分出色的游戏引擎,很多优秀的 iOS平面游戏都基于 Cocos2d-iPhone 开发,而它的实现语言是 Objective-C.因此,Cocos2d-x 也就沿袭了 Objective-C

14、Cocos2dx 3.0游戏开发找小三之Scene and Layer:一场游戏一场梦

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30474393 Scene :场景 了解了Director 之后,接下来介绍 Scene 这个与它紧密相关的游戏组件. 通过之前的学习,我们已经了解了场景以及它在流程控制中的地位. 在 Cocos2d-x 中,Scene 定义了一个场景.场景只是层的容器,包含了所有需要显示的游戏元素. 因此相对于其他游戏元素,Scene 并没有提供什么特别的功能,就是一

15、Cocos2dx 3.0游戏开发找小三之Sprite:每个精灵都是上辈子折翼的天使

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30475395 Sprite Sprite 可以说是游戏中最重要的组成元素: 它描述了游戏中的精灵,是 Node 的一个最重要也最灵活的子类. Sprite 很重要,它代表了游戏中一个最小的可见单位, 同时Sprite 也很灵活,它装载了一个平面纹理,具有丰富的表现力,而且 可以通过多种方式加载. 如果说 Scene 和 Layer 代表了宏观的游戏元素

18、Cocos2dx 3.0游戏开发找小三之cocos2d-x,请问你是怎么调度的咩

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30478251 Cocos2d 的一大特色就是提供了事件驱动的游戏框架, 引擎会在合适的时候调用事件处理函数,我们只需要在函数中添加对各种游戏事件的处理, 就可以完成一个完整的游戏了. 例如,为了实现游戏的动态变化,Cocos2d 提供了两种定时器事件: 为了响应用户输入,Cocos2d 提供了触摸事件和传感器事件: 此外,Cocos2d 还提供了一系列

10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本之前Cocos2d-x 引擎为我们提供了 CCArray. CCDictionary 等 Objective-C 风格的容器: 使用 Cocos2d-x 容器的一个重要原因在于 Cocos2d-x 的内存管理. 一般来说,被存入容器的对象在移除之前都应该保证是有效的, 但值得注意的是,在v3.0 beta版本中加入了数据结

3、Cocos2dx 3.0游戏开发找小三之搭建开发环境

尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27107295 搭建开发环境 使用 Cocos2d-x 的一个非常大便利之处在于,我们能够在 PC 或 Mac 环境下完毕编码和大部分的调试,然后再迁移到其它设备 上做实际环境測试.这意味着我们能够在 PC 上开发游戏.然后以极其低廉的成本把游戏迁移到 iOS 或其它平台上,从而节 省了开发阶段支付在设备方面的很多费用. 前面提到,Cocos2d-x