制作新手引导高亮区域方法之一:混合模式

demo下载:Quick-x-HighlightArea-master.zip


1、混合模式

(1)首先创建一个全屏的CCRenderTexture实例

这里使用的黑色 0.6的透明度,看起来的效果就是一层黑色半透明的遮罩叠在游戏界面上面:

1
2
3
4
local pRt = CCRenderTexture:create(size.width, size.height)
local color = ccc3(0, 0, 0) --黑色
local opacity = 0.6 --透明度
pRt:clear(color.r, color.g, color.b, opacity)


(2)设置混合模式

具体原理可以参考 http://blog.csdn.net/yang3wei/article/details/7795764

1
2
3
local blend = ccBlendFunc()
blend.src = GL_ZERO
blend.dst = GL_ONE_MINUS_SRC_ALPHA


(3) "刷"出高亮区域

这里是把一个黑色的圆形通过拉伸来实现椭圆效果(CCRenderTexture有个坑,注意不要在begin和endToLua之间创建精灵,安卓下会发生偏移,以后还会提到):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
local circleSpr = CCSprite:create( "Images/circle.png" )
local circleSize = circleSpr:getContentSize()
 
circleSpr:setBlendFunc(blend) --把贴图“刷”掉,高亮效果的关键
 
--宽度和高度参数,1.4142为根号2,矩形的外接椭圆的长轴与短轴长度
local widthPara = 1.4142 / circleSize.width
local heightPara = 1.4142 / circleSize.height
 
local rectArray = { [1] = CCRect(100, 100, 100, 100), 
                     [2] = CCRect(200, 100, 100, 150), 
                     [3] = CCRect(450, 35, 150, 100),
                     [4] = CCRect(300, 300, 100, 100),
                         }
     
     pRt:begin()
         for  i, rect in ipairs(rectArray)  do
             local fScaleX = widthPara * rect.size.width
             local fScaleY = heightPara * rect.size.height
             circleSpr:setScaleX(fScaleX)
             circleSpr:setScaleY(fScaleY)
             circleSpr:setPosition(rect:getMidX(), rect:getMidY())
             circleSpr:visit()
         end
     pRt:endToLua()

 

(4)获得贴图然后创建精灵即可,注意要翻转一下y轴

1
2
3
4
local newSprite =  CCSprite:createWithTexture(pRt:getSprite():getTexture())
newSprite:setFlipY( true ) --翻转
newSprite:setPosition(display.cx, display.cy)
self:addChild(newSprite)

使用的圆形图片

1410763940338815.png

具体效果

1410763958330669.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值