由于cocos2d-x中的优先级小的,先响应触摸事件,这是,我们只需要设置新添加的cclayer层的优先级即可,但由于ccmenu的优先级较高,所以,很有可能透过我们添加的触摸层,响应之前的绑定的button事件,而如果我们设置此触摸层优先级比button的低时,又导致在这层添加的button按钮的触摸事件不能触发,导致本层应该触摸的事件也不能响应,这样也达不到我们理想的效果:弹出一个层,屏蔽后面的事件,在当层可以有一些按钮,让我们进行不同的选择,比如确定,or 取消。
自从cocos2d-x2.0版本后,添加了一个CCControlButton,这个优先级为0,比默认的button高,因此,我们可以在当前层添加CCControlButton,在弹出的层设置layer的优先级比0小,这样,在弹出的层添加menu就能够响应,也不会影响后面的事件。当然,由于CCControlButton的优先级是可以自动设置的,所以,我们也可以设置弹出的层为-128(或者更小),然后设置CCControlButton的优先级更小就可以了。
具体代码如下:
BlockTouchLayer *block = BlockTouchLayer::create();
this->addChild(block);
BlockTouchLayer的声明文件:
#ifndef __test__BlockTouchLayer__
#define __test__BlockTouchLayer__
#include <iostream>
#include "cocos2d.h"
#include "cocos-ext.h"
using namespace cocos2d;
class BlockTouchLayer :public CCLayerColor
{
public:
virtual bool init();
void initData();
virtual void registerWithTouchDispatcher(); //重写触摸事件,阻止后端事件响应
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
void callBack(CCObject *pSender);
CREATE_FUNC(BlockTouchLayer);
};
#endif
BlockTouchLayer的具体实现文件:
#include "BlockTouchLayer.h"
USING_NS_CC_EXT;
bool BlockTouchLayer::init()
{
ccColor4B color = {0,0,0,125}; //设置面板颜色及透明度
if (!CCLayerColor::initWithColor(color))
{
return false;
}
initData();
setTouchEnabled(true); //开启触摸事件
return true;
}
void BlockTouchLayer::initData()
{
CCSize winsize = CCDirector::sharedDirector()->getWinSize();
CCSprite *sp = CCSprite::create("Icon.png");
this->addChild(sp);
sp->setPosition(ccp(winsize.width/2,winsize.height/2));
CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("load.plist", "load.png");
CCSprite *sprite1 = CCSprite::createWithSpriteFrameName("loading1.png");
sprite1->setPosition(ccp(winsize.width/2, winsize.height/2));
//this->addChild(sprite1);
CCSpriteBatchNode *batchNode = CCSpriteBatchNode::create("load.png");
batchNode->addChild(sprite1);
this->addChild(batchNode); // 可以起到一定的优化作用,最好不要直接添加精灵
CCArray *spriteArray = CCArray::create();
char str[100] = {0};
for (int i=1; i <= 14; i++)
{
sprintf(str, "loading%d.png", i);
CCSpriteFrame *frame = cache->spriteFrameByName(str);
spriteArray->addObject(frame);
}
CCAnimation *animation = CCAnimation::createWithSpriteFrames(spriteArray,0.5);
sprite1->runAction(CCRepeatForever::create(CCAnimate::create(animation)));
cocos2d::extension::CCScale9Sprite *sprite9 = cocos2d::extension::CCScale9Sprite::create("btn_blackblue.png");
CCLabelTTF *label = CCLabelTTF::create("click me", "", 22);
cocos2d::extension::CCControlButton *controlButton = cocos2d::extension::CCControlButton::create(label, sprite9);
controlButton->addTargetWithActionForControlEvents(this, cccontrol_selector(BlockTouchLayer::callBack), cocos2d::extension::CCControlEventTouchDown);
this->addChild(controlButton);
controlButton->setPosition(ccp(winsize.width/3, winsize.height/2));
controlButton->setTouchPriority(-200); //设置CCControlButton的优先级
//controlButton->setZoomOnTouchDown(true);
}
void BlockTouchLayer::callBack(cocos2d::CCObject *pSender)
{
//CCNotificationCenter::sharedNotificationCenter()->postNotification("click",this);
BlockTouchLayer *tmplayer = (BlockTouchLayer *)((CCMenu *)(pSender))->getParent();
tmplayer->removeFromParentAndCleanup(true); //点击按钮后,移除弹出的面板
}
void BlockTouchLayer::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true); //注册并设置当前面板触摸的优先级
}
bool BlockTouchLayer::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
return true; // 吞噬掉后面的响应
}
void BlockTouchLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
}
void BlockTouchLayer::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
}
原文:
http://blog.csdn.net/somestill/article/details/12752739
分享到:
相关推荐
3. 事件处理:Cocos2d支持触摸事件、键盘事件等,使得玩家可以通过手势或按键进行游戏操作。 4. 游戏逻辑:Cocos2d提供的脚本语言(如Lua)可以编写游戏逻辑,如玩家出牌规则、得分计算等。 二、Node.js后端开发 ...
cocos2d-js是Cocos2d-x引擎的JavaScript版本,它提供了强大的2D游戏开发能力。该框架支持多种平台,包括浏览器、微信小程序等,让开发者能够快速构建跨平台的游戏应用。cocos2d-js的核心特性包括: 1. **丰富的图形...
根据提供的标题、描述以及部分可见内容,我们可以了解到这是一份关于Cocos2D框架下的一个示例项目——“PandaRunDemo(熊猫快跑)”的相关资源分享。下面将从几个方面来详细解析这个项目的背景知识和技术要点。 ###...
1. **图形渲染**:Cocos2d-x使用OpenGL ES进行图形渲染,支持丰富的2D动画效果和3D场景构建。 2. **物理引擎**:内置Box2D或Chipmunk物理引擎,用于模拟真实世界的碰撞检测和物体运动。 3. **资源管理**:Cocos...
虽然标题中提到的是Android开发,但考虑到游戏特性,这里可能使用了一个轻量级的游戏引擎,比如Cocos2d-x或Unity,它们都支持跨平台开发,包括Android,并且可以方便地集成重力感应和触摸控制。 【Worm-master】 这...
"小小西游"很可能使用了特定的游戏引擎来构建,可能是Unity、Cocos2d-x等。游戏引擎是游戏开发的基础,它包含了渲染、物理、音频、输入处理等多种功能模块,使得开发者可以专注于游戏逻辑而不是底层技术实现。 ...
- 游戏引擎:Unity、Unreal Engine、Cocos2d-x等。 - 物理引擎:碰撞检测、动画处理。 - AI算法:路径规划、游戏AI行为。 7. **移动应用开发**: - J2ME:Java Micro Edition,用于开发移动设备应用。 - 移动...
Cocos2d-x是一个广泛使用的2D游戏开发引擎,提供了一系列的API,用于创建游戏场景、精灵、动画、物理引擎、触摸事件处理等功能。开发者可以基于这些类构建自己的游戏逻辑。 2. **music**:音乐类模块主要负责游戏的...
Cocos Creator是一款强大的2D和2.5D游戏开发工具,它集成了图形编辑器、脚本系统以及项目管理功能,让开发者能够高效地创建游戏并进行跨平台发布。这款工具支持JavaScript和TypeScript作为主要的编程语言,并且可以...
在本项目中,Cocos2d用于构建游戏界面,展示棋盘和棋子,并处理用户的触摸输入,将玩家的操作转化为网络消息发送到服务器。 游戏逻辑的实现是项目的核心部分。在Node.js服务器端,需要维护每场游戏的状态,包括棋盘...
2. 跨平台框架:使用如Unity或Cocos2d-x这样的跨平台游戏引擎,可以方便地将游戏移植到多个平台。 3. 同步机制:确保PC和移动端的数据同步,包括用户账号、游戏进度等,这需要后端提供相应的接口支持。 总之,...
常见的网页游戏引擎有Unity、Phaser、Cocos2d-x、Three.js等。这些引擎提供了丰富的功能,如2D/3D渲染、物理模拟、动画控制等。选择引擎时要考虑性能、跨平台支持、学习曲线和社区资源等因素。同时,辅助工具如...
2. **游戏引擎**:可能使用Unity3D或者Cocos2d-x等跨平台游戏引擎,以简化开发流程和提高效率。 3. **图形界面**:使用XML布局文件设计用户界面,结合Java或Kotlin实现动态效果,如动画和触摸事件处理。 4. **网络...
1. **游戏引擎**:开发这款游戏可能使用了Unity或Cocos2d-x等主流游戏引擎,它们支持跨平台开发,能够实现高质量的图形渲染和流畅的游戏体验。 2. **编程语言**:游戏的后端逻辑可能使用Java或Kotlin编写,因为这是...
2. **动画效果**:圣诞雪花的动态效果是吸引用户的重要因素,可能需要使用到2D或3D图形库,如Unity3D或Cocos2d-x,来实现雪花飘落的逼真动画。 3. **交互体验**:为了使小程序更具吸引力,开发者需要考虑如何让用户...
尽管滑动游戏的前端通常由更适合图形渲染和触摸交互的语言(如Unity、Cocos2d-x或React Native)编写,但PHP在构建游戏的后端基础设施方面具有广泛的应用。一个完整的滑动游戏开发流程会结合多种技术,包括前端的UI...
1. **图形用户界面(GUI)**:使用游戏引擎(如Unity或Cocos2d-x)或自定义UI组件创建游戏界面,确保视觉效果吸引人并且易于操作。 2. **物理引擎**:为了模拟真实的抛物线运动,游戏可能使用了物理引擎,如Box2D,...