位置: 编程技术 - 正文

cocos2dx3.6 弹出对话框的实现(cocos2djs)

编辑:rootadmin

推荐整理分享cocos2dx3.6 弹出对话框的实现(cocos2djs),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2djs,cocos2dx schedule,cocos2dx接入广告,cocos loading,cocos2djs,cocos弹窗,cocos弹窗,cocos2dx接入广告,内容如对您有帮助,希望把文章链接给更多的朋友!

头文件:

//

// PopAlertDialog.h

// macstudycocos2dx

//

// Created by WangWei on /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(constchar* backgroudImage,Size dialogSize);

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

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

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

void setTitle(constchar* title,int fontsize=);

void setContentText(constchar* text,int fontsize=,int padding=,int paddingTop=);

void setCallBackFunc(Ref* target,SEL_CallFuncN callfun);

bool addButton(constchar* normalImage,constchar* selectedImage,constchar* 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 /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();

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(constchar* backgoundImage,Size dialogSize){

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

PopAlertDialog* layer=PopAlertDialog::create();

cocos2dx3.6  弹出对话框的实现(cocos2djs)

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

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

layer->m_dialogContentSize=dialogSize;

return layer;

}

void PopAlertDialog::setTitle(constchar* title,int fontsize/*=*/){

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

label->setColor(Color3B::RED);

setLabelTitle(label);

}

void PopAlertDialog::setContentText(constchar* 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(constchar *normalImage, const char *selectedImage,constchar* 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", );

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.,1.),

ScaleTo::create(0.,0.),

ScaleTo::create(0.,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-.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方法:

voidMenuItemSpritTest::select_learn(Object* pSender){

log("you had select this button");

PopAlertDialog* popup=PopAlertDialog::create("background.png",Size(,));

popup->setTitle("Message");

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

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();

}

}

效果图:

设置glblendfunc出现黑框 发现用粒子编辑器设置粒子效果的混合模式,放到程序里会出现偏差,比如黑框等。搜了下,发现原因是:DestBlendFunc只接受以下8个参数:GL_ZEROGL_ONEGL_SR

cocos2dx多个精灵调用runAction()方法执行组合动作,只有最后一个精灵有效的问题 问题代码如下//将MoveTo和RotateTo两个动作转换成FiniteTimeAction类型FiniteTimeAction*MVto=(FiniteTimeAction*)(MoveTo::create(2.0,Vec2(,)));FiniteTimeAction*ROto=(FiniteTimeAction*

.6.开始写博客记录cocos2dx学习历程 今天起,写博客记录自己的cocos2dx学习过程。早在4.就到手的macbookpro,一直没抽出太多的时间去学习,拖拉两个月,才初步学会了搭建环境、创建工程

标签: cocos2djs

本文链接地址:https://www.jiuchutong.com/biancheng/368366.html 转载请保留说明!

上一篇:在cocos2dx中实现水波滤镜(cocos2dx schedule)

下一篇:cocos2dx多个精灵调用runAction()方法执行组合动作,只有最后一个精灵有效的问题(cocos2d-x教程)

  • 企业所得税汇算清缴退税怎么做账
  • 已抵扣进项税额转出怎么申报
  • 购销合同中约定产品质量问题引起的问题
  • 企业所得税税负高是什么意思
  • 减免增值税计入
  • 劳务工报价单
  • 专项附加扣除可以随时填报吗
  • 购房契税应该交给谁
  • 煤炭企业补偿费会计分录
  • 商贸企业变更为生产企业
  • 独立核算分公司注销与总公司账务
  • 出差旅费补助报销明细表需要发票吗?
  • 公司收到银行转账会计分录
  • 未开票确认收入分录怎么做
  • 建筑业农民工工资
  • 银行给企业的存款怎么存
  • 劳保用品会计科目是什么
  • 个税手续费返还比例
  • 开票资料上的电话可以是手机吗?
  • 取得甲供材料按简易征收发票能抵扣吗
  • 土地所有权和使用权的法律规定
  • 货物劳务和应税收入区别
  • 个税免缴款
  • 电脑换系统怎么备份软件
  • 在电脑上呢
  • 全月应纳税所得额什么意思
  • 公司销售自己使用过的固定资产
  • 品牌使用费分录
  • 融资租赁和经营租赁哪个更常见
  • 微博 照片水印
  • unity默认存储路径
  • bug is
  • 默认网关不可用的解决办法
  • PHP:pg_meta_data()的用法_PostgreSQL函数
  • 物业费开增值税专用发票
  • 简述gnss数据处理流程
  • 微信第三方登录信息修改
  • 模型怎么部署
  • 修改命令的快捷键
  • php web socket
  • 股东分红会计分录案例
  • 印花税申报完成如何缴纳
  • 办营业执照怎么填写经营范围
  • php单例模式优点
  • sql2005使用
  • 税控服务费全额抵扣申报怎么填
  • 无形资产加计扣除怎么算举例
  • 公司发放加班补贴怎么做账
  • 住宿发票抵税
  • 外埠存款会计分录怎么写
  • 建筑行业跨期收益怎么算
  • 向投资者分配利润或股利为什么减少所有者权益?
  • 垫付的开办费怎么做账
  • 怎样算小公司
  • mysql事务视图
  • windows 2000 server sp4 下载
  • xp系统和2003系统的异同
  • centos中如何安装软件
  • win10预览版和正式版
  • win8.1如何更改开始菜单
  • scrtkfg.exe - scrtkfg是什么进程 有什么用
  • msscli.exe - msscli是什么进程 有什么用
  • 欢迎使用来电提醒业务是什么意思
  • Node.js中的全局对象有
  • android floatbutton
  • linux bash脚本
  • 关于angularjs1说法,错误的是
  • python文件a
  • jquery img onload
  • 教你怎样用气球做可爱小兔子气球君带你做气球手工
  • JavaScript中的方法名不区分大小写
  • 国家税务总局12366上海(国际)纳税服务中心
  • 国税局事业编制和公务员哪个比较好
  • 改税务报表会有限风险吗
  • 北京国税发票查询真伪查询
  • cfca证书下载流程
  • 车辆购置税如何入账
  • 税务总局转变税收征管方式
  • 一般纳税人忘记报税一个月罚多少钱
  • 内蒙民生认证系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设