【游戏客户端】实现游戏裁剪效果

【游戏客户端】实现游戏裁剪效果

 

      之前的博客中,我和大家分享了如何做:

      还记得以前玩毒奶粉的时候,我玩的是弹药专家,他有一个45技能是可以开狙击枪的,画面一下子就会出现一个瞄准镜,当时觉得:哇!好炫酷。其实它就是利用到了裁剪功能,今天和大家分享一下如何实现游戏里的裁剪结点clippingNode

(一)底板,模板&背景图

      为了方便理解,我们需要先明确这三个概念:底板,模板&背景图

(1)背景图

      裁剪是把想展示的画面给展示出来,那不想展示的部分就需要用背景图给填充,像上图“狙击枪”效果的背景就是黑色的底图

(2)底板

      底板就是我们需要进行裁剪的画面

(3)模板

      模板就是我们对底板进行限制的规则画面,一般会根据模板的alpha值来决定底板哪些像素显示,哪些像素不显示

 (4)模板

图A

                                                    图B

      举个栗子,我们用黑色背景作为背景图,图A作为底板,图B作为模板。模板alpha值不为0的地方进行显示,结果就会变成这样

(二)裁剪结点clippingNode

      有了上述概念之后,就可以介绍今天的主角裁剪结点clippingNode了,这是cocos给我们提供的一个裁剪结点类,它可以像普通节点一样放入Layer,Scene,Node中并有着以下的常用方法:

(1)setStencil

      可以通过setStencil(stencil)的方式给裁剪结点对象添加一个模板,可以是node,sprite

(2)setAlphaThreshold

      可以通过setAlphaThreshold来设置alpha的阈值,范围在0到1之间:

      默认为 1 ,表示alpha测试默认关闭,即模板限制下的所有内容全部绘制

      若不是1 ,表示只绘制模板中,alpha像素大于alphaThreshold的内容

      以下图片,其中小球以外的其他区域像素为透明的
      

这里写图片描述

      不设置AlphaThreshold闸值的时候绘制出的内容为: 

       设置AlphaThreshold闸值为0.5的时候: 

 

 

(3)setInverted

      默认为false,但当调用这个接口设置为true时,原本是显示符合模板alpha阈值的像素,改为显示不符合模板alpha阈值的像素

     在setInverted设置为true时:

      

       默认状态时:

(三)原理

      clippingNode的实现原理是在其绘制(visit)的时候,先绘制模板内容,然后根据模板像素的alpha值,判断这个像素该不该显示底板像素内容,若不该显示,则会向openGL设置这个像素点的深度缓冲值,取原来的颜色缓冲进行绘制

好啦今天就到这里
点赞,关注!!!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值