cocos2dx简单弹窗实现

本文介绍了如何使用cocos2dx创建弹出窗口,并实现暂停功能。通过设置触摸级别,创建暂停游戏的场景,添加背景、暂停按钮以及继续和退出游戏的选项,实现了暂停游戏时在屏幕中央显示暂停窗口,以及点击按钮继续或结束游戏的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回忆暑假,弹框的问题一直萦绕在我身边,我决心今夜来重新复习这个问题。回忆起当初共同探讨的时期还是十分怀念的。 废话不多说。弹出框,顾名思义就是弹出一个窗口(一个Sprite纹理图片);并且对下面的层触摸事件等没有影响。 我就用暂停来实现这些功能。

 首先面对弹出框,我们需要理解什么是触摸级别。触摸级别是cocos2dx触发触摸事件的优先级,级别越低,触摸的优先级越高,所以有菜单的触摸级别是-128,这已经是相当优先了。 好了 接下来我们试着去实现这些功能。

 .h文件

#ifndef __PAUSEGAME__

#define __PAUSEGAME__

#include "cocos2d.h"

#include "cocos-ext.h"

US_NS_CC;

using namespace cocos2d:extension;

 

class pushWindow : public CCLayer

{

public:

static CCScene* scene();

virtual bool init();

CREATE_FUNC(pushWindow);

virtual bool ccTouchBagan(CCTouch* pTouch,CCEvent* pevent);

void continueGame(CCObject* obj);

void exitGame(CCObject* obj);

void  push_Window(CCObject* psender,CCControlEvent event);

private:

CCMenuItemImage* continue_Button;

CCMenuItemImage* exit_Button;

CCMenu* menu;

};

#endif

.cpp文件

#include "pausegame.h"

CCScene* pushWndow::scene()

{

CCScene* scene=CCScene::create();

pushWindow* layer=pushWindow::create();

scene->addChild(layer);

return scene;

}

virtual bool pushWindow::init()

{

if(!CCLayer::init())

{

return false;

}

CCSize visibleSize=CCDirector::sharedDirector()->getVisibleSize();

CCSprite* bg_Sprite=CCSprite::create("bg_Sprite.png");

bg_Sprite->setPosition(ccp(visibleSize.width/2,visibleSize,height/2));

this->addChild(bg_Sprite);

CCScale9Sprite* pause_ButtonH=CCScale9Sprite::create("pause_ButtonH.png");

CCScale9Sprite* pause_Button=CCScale9Sprite::create("pause_Button.png");

CCControlButton* pauseBtn=CCControlButton::create(pause_ButtonH);

pauseBtn->setBackgroundSpriteForState(pause_Button,CCControlStateSelected)

pauseBtn->setPreferredSize(CCSizeMake(100,100));

pauseBtn->setPosition(ccp(visibleSize.width*0.9,visibleSize.height*0.9));

this->addChild(pauseBtn);

pauseBtn->addTargetWithActionForControlEvents(this,cccontrol_selector(pushWindow::push_Window),CCControlEventTouchInside);

}

void pushWindow::push_Window(CCObject* psender, CCControlEvent event)

{

CCDirector::sharedDirector()->pause();

CCSize size=CCDirector::sharedDirector()->getVisibleSize();

CCLayerColor* layerColor=CCLayerColor::create(ccc4(0,0,0,100));

layerColor->setTag(1);

this->addChild(layerColor);

CCSprite* pause_Window=CCSprite::create("pause_Window");

pause_Window->setPosition(ccp(size.width/2,size.heignt/2));

this->addChild(pause_Window);

continue_Button=CCMenuItemImage::create("continue_Sprite.png","continue_Sprite.png",this,menu_selector());

continue_Button->setPosition(ccp(0,-size.height*0.13));

exit_Button=CCMenuItemImage::create("exit_Sprite.png","exit_Sprite.png",this,menu_selector());

exit_Button->setPosition(ccp(0,size.height*0.13));

menu=CCMenu::create(continue_Button,exit_Button,NULL);

menu->setPositon(ccp(pause_Window->getContentSize().width/2,pause_Window->getContentSize().height/2));

menu->setTouchPriority(kCCMenuHandlerPrioritv*2-1,true);

pause->addChild(menu);

pause_Window-<setTag(2);

 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,kCCMenuHandlerPrioritv*2,true);

}

void pushWindow:: continueGame(CCObject* obj )

{

CCDirector::sharedDirector()->resume();

CCLayerColor* layer_Color=dynamic_cast<CCLayerColor*>(this->getChildByTag(1));

layer_Color->removeFromParentAndClean(true);

CCSprite* layer_Sprite=dynamic_cast<CCSprite*>(this-<getChildByTag(2));

layer_Sprite->removeFromParentAndClean(true);

}

void pushWindow:: exitGame(CCObject* obj)

{

CCDirector::sharedDirector()->end();

}

bool pushWindow::ccTouchBegan(CCTouch* ptouch,CCEvent* pevent)

{

return true;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值