cocos2dx 3.x(纯代码实现弹出对话框/提示框/警告框)

头文件:

//

//  PopAlertDialog.h

//  macstudycocos2dx

//

//  Created by WangWei on 15/6/8.

//

//

#ifndef __macstudycocos2dx__PopAlertDialog__

#define __macstudycocos2dx__PopAlertDialog__

#pragma once

#include "cocos2d.h"

#include "cocos-ext.h"

USING_NS_CC;

USING_NS_CC_EXT;

class PopAlertDialog:public LayerColor{  //继承LayerColor类,方便更改layer的颜色和透明度

public:

PopAlertDialog();

~PopAlertDialog();

virtual bool init();

CREATE_FUNC(PopAlertDialog);

static PopAlertDialog* create(const char* backgroudImage,Size dialogSize);

bool onTouchBegan(Touch* touch,Event* event);

void onTouchMoved(Touch* touch,Event* event);

void onTouchEnded(Touch* touch,Event* event);

void setTitle(const char* title,int fontsize=20);

void setContentText(const char* text,int fontsize=20,int padding=50,int paddingTop=50);

void setCallBackFunc(Ref* target,SEL_CallFuncN callfun);

bool addButton(const char* normalImage,const char* selectedImage,const char* title,int tag=0);

virtual void onEnter();

virtual void onExit();

void backgroundFinish();

private:

void buttonCallBack(Ref* pSender);

int m_contentPadding;

int m_contentPaddingTop;

Size m_dialogContentSize; //对话框大小

Ref* m_callbackListener;

SEL_CallFuncN m_callback;

CC_SYNTHESIZE_RETAIN(Menu*, m__pMenu, MenuButton);

CC_SYNTHESIZE_RETAIN(Sprite*, m__sfBackGround, SpriteBackGround);

CC_SYNTHESIZE_RETAIN(Scale9Sprite*, m__s9BackGround, Sprite9BackGround);

CC_SYNTHESIZE_RETAIN(LabelTTF*, m__ltTitle, LabelTitle);

CC_SYNTHESIZE_RETAIN(LabelTTF*, m__ltContentText, LabelContentText);

};

#endif /* defined(__macstudycocos2dx__PopAlertDialog__) */

cpp文件:

//

//  PopAlertDialog.cpp

//  macstudycocos2dx

//

//  Created by WangWei on 15/6/8.

//

//

#include "PopAlertDialog.h"

PopAlertDialog::PopAlertDialog()

:

m__pMenu(NULL)

,m_contentPadding(0)

,m_contentPaddingTop(0)

,m_callbackListener(NULL)

,m_callback(NULL)

,m__sfBackGround(NULL)

,m__s9BackGround(NULL)

,m__ltContentText(NULL)

,m__ltTitle(NULL)

{

}

PopAlertDialog::~PopAlertDialog(){

CC_SAFE_RELEASE(m__pMenu);

CC_SAFE_RELEASE(m__sfBackGround);

CC_SAFE_RELEASE(m__s9BackGround);

CC_SAFE_RELEASE(m__ltContentText);

CC_SAFE_RELEASE(m__ltTitle);

}

bool PopAlertDialog::init(){

if (!CCLayerColor::init()) {

return false;

}

Menu* menu=Menu::create();

menu->setPosition(CCPointZero);

setMenuButton(menu);

auto listener=EventListenerTouchOneByOne::create();

listener->setSwallowTouches(true);

listener->onTouchBegan=CC_CALLBACK_2(PopAlertDialog::onTouchBegan, this);

listener->onTouchMoved=CC_CALLBACK_2(PopAlertDialog::onTouchMoved, this);

listener->onTouchEnded=CC_CALLBACK_2(PopAlertDialog::onTouchEnded, this);

auto dispatcher=Director::getInstance()->getEventDispatcher();

dispatcher->addEventListenerWithSceneGraphPriority(listener, this);

//设置弹出层的颜色,指定为淡灰色

setColor(Color3B::GRAY);

setOpacity(128);

return true;

}

bool PopAlertDialog::onTouchBegan(Touch* touch,Event* event){

return true;

}

void PopAlertDialog::onTouchMoved(Touch* touch,Event* event){

}

void PopAlertDialog::onTouchEnded(Touch* touch,Event* event){

}

PopAlertDialog* PopAlertDialog::create(const char* backgoundImage,Size dialogSize){

//创建弹出对话框,指定背景图和大小。

PopAlertDialog* layer=PopAlertDialog::create();

//layer->setSpriteBackGround(Sprite::create(backgoundImage));

layer->setSprite9BackGround(Scale9Sprite::create(backgoundImage));

layer->m_dialogContentSize=dialogSize;

return layer;

}

void PopAlertDialog::setTitle(const char* title,int fontsize /*=20*/){

LabelTTF* label=LabelTTF::create(title, "", fontsize);

label->setColor(Color3B::RED);

setLabelTitle(label);

}

void PopAlertDialog::setContentText(const char* text,int fontsize,int padding,int paddingTop){

LabelTTF* ltf=LabelTTF::create(text, "", fontsize);

ltf->setColor(Color3B::BLUE);

setLabelContentText(ltf);

m_contentPadding=padding;

m_contentPaddingTop=paddingTop;

}

void PopAlertDialog::setCallBackFunc(Ref*target, SEL_CallFuncN callfun){

m_callbackListener=target;

m_callback=callfun;

}

bool PopAlertDialog::addButton(const char *normalImage, const char *selectedImage,const char* title,int tag){

Size winSize=Director::getInstance()->getWinSize();

Point center_point=Point(winSize.width/2,winSize.height/2);

auto menuImage=MenuItemImage::create(

normalImage,

selectedImage,

CC_CALLBACK_1(PopAlertDialog::buttonCallBack,this) );

menuImage->setTag(tag);

menuImage->setPosition(center_point);

Size menuSize=menuImage->getContentSize();

Label* labelttf=Label::createWithTTF(title, "fonts/arial.ttf", 15);

labelttf->setColor(Color3B(Color3B::BLACK));

labelttf->setPosition(Point(menuSize.width/2,menuSize.height/2));

menuImage->addChild(labelttf);

getMenuButton()->addChild(menuImage);

return true;

}

void PopAlertDialog::buttonCallBack(Ref* pSender){

Node* node=dynamic_cast<Node*>(pSender);

//log("[========PopAlertDialog:buttonCallBack=======]touch tag:%d",node->getTag());

if (m_callback&&m_callbackListener) {

(m_callbackListener->*m_callback)(node);

}

this->removeFromParentAndCleanup(true);

}

void  PopAlertDialog::onEnter(){

//log("PopAlertDialog::onEnter is loading");

LayerColor::onEnter();

Size winSize=Director::getInstance()->getWinSize();

Point center=Point(winSize.width/2,winSize.height/2);

//Sprite* background=getSpriteBackGround();

Scale9Sprite* background=getSprite9BackGround();

background->setContentSize(m_dialogContentSize);//指定对话框大小

background->setPosition(Point(winSize.width/2,winSize.height/2));

this->addChild(background,0,0);

Action* popupActions=Sequence::create(                                                                                       ScaleTo::create(0.0, 0.0),

ScaleTo::create(0.06, 1.05),

ScaleTo::create(0.08, 0.95),

ScaleTo::create(0.08,1.0),

CallFunc::create(CC_CALLBACK_0(PopAlertDialog::backgroundFinish, this))

, NULL);

background->runAction(popupActions);

}

void PopAlertDialog::backgroundFinish(){

Size winSize=Director::getInstance()->getWinSize();

Point pCenter=Point(winSize.width/2,winSize.height/2);

this->addChild(getMenuButton());

float btnWidth=m_dialogContentSize.width/(getMenuButton()->getChildrenCount()+1);

Vector<Node*> vector=getMenuButton()->getChildren();

Ref* pObj=NULL;

int i=0;

for (Node*pObj:vector){

Node* node=dynamic_cast<Node*>(pObj);

node->setPosition(Point(winSize.width/2-m_dialogContentSize.width/2+btnWidth*(i+1),winSize.height/2-m_dialogContentSize.height/3));

i++;

}

if (getLabelTitle()) {

getLabelTitle()->setPosition(ccpAdd(pCenter, ccp(0,m_dialogContentSize.height/2-35.0f)));

this->addChild(getLabelTitle());

}

if (getLabelContentText()) {

CCLabelTTF* ltf=getLabelContentText();

ltf->setPosition(ccp(winSize.width/2,winSize.height/2));

ltf->setDimensions(CCSizeMake(m_dialogContentSize.width-m_contentPadding*2, m_dialogContentSize.height-m_contentPaddingTop));

ltf->setHorizontalAlignment(kCCTextAlignmentLeft);

this->addChild(ltf);

}

}

void PopAlertDialog::onExit(){

log("PopAlertDialog onExit");

CCLayerColor::onExit();

}

调用:

MenuItemSprite* item1=MenuItemSprite::create(btn_normal_sprite, btn_select_sprite,nullptr,CC_CALLBACK_1(MenuItemSpritTest::select_learn,this));

select_learn方法:

void MenuItemSpritTest::select_learn(Object* pSender){

log("you had select this button");

PopAlertDialog* popup=PopAlertDialog::create("background01.png",Size(800,250));

popup->setTitle("Message");

popup->setContentText("This is a test message!",20,50,150);

popup->setCallBackFunc(this,callfuncN_selector(MenuItemSpritTest::popButtonCallback));

popup->addButton("btnreturn.png", "btnreturn.png", "OK",0);

popup->addButton("btnreturn.png", "btnreturn.png", "Cancel",1);

this->addChild(popup);

}

void  MenuItemSpritTest::popButtonCallback(Node* pNode){

log("[==========]button call back.tag %d",pNode->getTag());

if (pNode->getTag()==0) {

Director::getInstance()->end();

}

if (pNode->getTag()==1) {

//pNode->getParent()->removeFromParent();

pNode->removeFromParent();

}

}

时间: 2024-11-19 17:59:17

cocos2dx 3.x(纯代码实现弹出对话框/提示框/警告框)的相关文章

定义Foo() 函数,弹出对话框提示当前选中的是第几个单选框

function foo(){ var ele = document.getElementsByName("radioElement"); for(var i = 0;i<ele.length;i++){ if(ele[i].checked){ alert(i+"---->"+ele[i].value); } } } <body> <form onsubmit="return foo();"> <inpu

Android 手机卫士--弹出对话框

在<Android 手机卫士--解析json与消息机制发送不同类型消息>一文中,消息机制发送不同类型的信息还没有完全实现,在出现异常的时候,应该弹出吐司提示异常,代码如下: private Handler mHandler = new Handler() { // public void handleMessage(android.os.Message msg) { switch (msg.what) { case UPDATE_VERSION: //弹出对话框,提示用户更新 //showUp

JS弹出对话框的三种实现方式的意义

最近开始学习JavaScript,最开始讲的就是alert().confirm()和prompt()三种JS弹出对话框.三种弹出对话框分别是警告.确认和提示消息. 第一种警告消息框 (alert)     alert 方法有一个参数,即希望对用户显示的文本字符串.该字符串不是 HTML 格式.该消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说,用户必须先关闭该消息框然后才能继续进行操作. <script> alert("Hello

JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法(转)

原文:JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 jquery-easyui是一个基于jquery的图形界面插件,利用easyui可以创建很多好看的网页界面效果,easyui的相关地址是:http://jquery-easyui.wikidot.com/: easyui的中文文档地址是:http://www.easyui.net/,本人也利用easeyUI在做一些页面效果.由于我很喜欢那种弹出的对话框界面,因此在界面中应用了Dialog类来处理一些确认

php网页,想弹出对话框, 消息框 简单代码

php网页,想弹出对话框, 消息框 简单代码 <?php echo "<script language=\"JavaScript\">alert(\"OK\");history.back();</script>"; ?> 或者 <?php echo "<script language=\"JavaScript\">\r\n"; echo " a

JavaScript中的三种弹出对话框

JavaScript中的三种弹出对话框 *****本文来自互联网****** 学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性更精彩,实际上我们经常会在进行网页浏览时简单这种类型的对话框,在用户与应用程序进行双向交流时,经常要用到对话框.avascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom

安卓弹出对话框——Alertdialog(一)

首先看各种样式的对话框: 我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造. 二.AlertDialog 今天我们重点要来了解的就是AlertDialog对话框,我们看到,AlertDialog是Dialog的一个直接子类. 使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框. 这里借用android的官方文档提供的一个图来看看AlertDialog框的组成

[Firefox附加组件]0003.弹出对话框

Firefox中使用面板(panel)模块来显示弹出对话框,面板的内容通过HTML编写.你可以在面板上运行content script,尽管在面板里的脚本无法直接访问插件代码,但是你可以在面板脚本和插件代码间交换信息.这次,我们做了一个会在单击时显示面板的动作按钮.面板上有一个<textarea>元素,用户按下return键时,<textarea>的内容会被发送给插件代码主程序.插件代码主程序会在控制台输出日志. 开发步骤 1.初始化项目,终端窗口运行以下命令. mkdir Dia

安卓飞机大战(三) 弹出对话框

在游戏时,不管是退出游戏还是选择战机,都要弹出一个对话框,需要以下代码 按一个按钮弹出对话框 Layout文件:(添加一个按钮) <Button        android:id="@+id/button1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="准备起飞