5弹出阴影遮罩_千文详述Cocos Creator弹出式对话框实现技术,着实硬核

正文

在Cocos Creator游戏开发中,经常需要使用到弹出式对话框,下面我们就一起来封装下自己的弹出式对话框。

一、弹出式对话框原理解析

1:对话框的结构:

1.  `根节点 -->`2.  `mask: 全屏的单色精灵,监听事件,关闭对话框;`3.  `dlg 与它的孩子: 对话框的内容,监听事件,挡住不让他传递到mask节点上;`4.  `弹出时动画:`5.  `mask: 渐变进来;`6.  `对话框内容缩放,并加上easing缓动对象;`7.  `收起时动画:`8.  `mask: 渐变出去;`9.  `对话框内容缩小,并加上easing 缓动对象;`

2: 对话框组件脚本

1.  `(1)show_dlg`2.  `(2)hide_dlg`

二、弹出式对话框控制组件

1.  `const {ccclass, property} = cc._decorator;`3.  `@ccclass`4.  `export default class PopDialogCtrl extends cc.Component {`5.  `    @property({type:cc.Node, tooltip:"弹出式对话框的遮罩节点"})`6.  `    mask : cc.Node = null;`7.  `    @property({type:cc.Node, tooltip:"弹出式对话框的主体内容节点"})`8.  `    content : cc.Node = null;`9.  `    @property({tooltip:"弹出式对话框初始化时的透明度"})`10.  `maskOpacity : number = 200;`12.  `    onLoad(){`13.  `        this.node.active = false;`14.  `        this.mask.opacity = this.maskOpacity;`15.  `}`17.  `    showDialog(){`18.  `        this.node.active = true;`19.  `        // mask淡入`20.  `        this.mask.opacity = 0;`21.  `        let fIn : cc.Action = cc.fadeTo(0.1, this.maskOpacity);`22.  `        this.mask.runAction(fIn);`24.  `        // content缩放显示`25.  `        this.content.setScale(0, 0);`26.  `        let s : cc.Action = cc.scaleTo(0.2, 1, 1).easing(cc.easeBackOut());`27.  `        this.content.runAction(s);`28.  `    }`29.  `    hideDialog(){`30.  `        // mask淡出`31.  `        this.mask.opacity = 0;`32.  `        let fOut : cc.Action = cc.fadeTo(0.3, 0);`33.  `        this.mask.runAction(fOut);`34.  `        // content缩放隐藏`35.  `        let s : cc.Action = cc.scaleTo(0.4, 0, 0).easing(cc.easeBackIn());`36.  `        let endf : cc.Action = cc.callFunc(function(){`37.  `            this.node.active = false;`38.  `        }.bind(this));`39.  `        let seq : cc.ActionInterval = cc.sequence([s, endf]);`40.  `        this.content.runAction(seq);`41.  `    }`42.  `}`

三、弹出式对话框UI制作

d9a214acbac74976a51d95c29ef062d9.png

上面设置,可以保证点击遮罩层的时候隐藏对话框。

四、弹出式对话框组件的使用

新建GameMgr.ts挂载到Canvas节点上

1.  `import PopDialogCtrl from "./PopDialogCtrl";`3.  `const {ccclass, property} = cc._decorator;`4.  `@ccclass`5.  `export default class GameMgrextends cc.Component {    `6.  `    @property({type:PopDialogCtrl, tooltip:"弹出式对话框"})`7.  `    popDialog : PopDialogCtrl = null;`8.  `    showDialog(){`9.  `        this.popDialog.showDialog();`10.  `    }`11.  `}`
024fe7d485ce207f28f84f4fef55d20e.png
24e4c487e9ec0e95038c1a189f6635c1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值