quick-cocos2d使用shader上色置灰问题

最近做项目碰到使用shader上色置灰的问题,与大家分享一下:
我们用的是quick-3.5版本+CocosStudio2.3.2,UI布局基本都是用CocosStudio来做的,结果发现直接通过
 self:getRootNode():getChildByName("node_layer"):getChildByName("testImageView")设置 shader置灰 完全没效果,但是cc.Sprite:create()出来的精灵使用shader是没问题的,纠结一番结果发现ImageView添加真实的node时通过虚函数CCNode::AddChild(CCNode*,int,int),需要先调换用ccui.ImageView的getVirtualRenderer()获得真实node,再使用shader的置灰方法。


shader.Cutil:setGray(imageView:getVirtualRenderer():getSprite(), true)这样就ok了;


 但是坑没有终结,
 因为场景上添加的还有scale9属性的imageView发现这个方法又不适用,无奈查阅源码,cocos开源的优势体现出来了,发现scale9sprite已经有现成的方法可以使用了,可以直接
scale9Sprite:getVirtualRenderer():setState(1)


在我觉得everything is ok的时候,发现数字字体位置偏移,又踏一坑。
我们的数字字体都是通过ccui.TextAtlas:create()创建的,网搜了一下发现是前人已经填过的坑
解决方法:
找到shaders/gray.vsh 原目录拷贝一下,重新命名后(我自己重命名为grayMVP.vsh),使用编辑器打开修改


gl_Position = CC_MVPMatrix * a_position;
//CC_PMatrix 为纹理原坐标   CC_MVPMatrix  为变动坐标


再重写一下shader方法 
 function TestLayer:LableAtlasSetGray(lableAtlas)
local program = cc.GLProgram:create("shaders/grayMVP.vsh", "shaders/gray.fsh")
program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
program:link()
program:updateUniforms()
lableAtlas:setGLProgram(program)
end
使用的时候
local lableAtlas = ccui.TextAtlas:create("0123456789", "num_fonts_1.png" , 32 , 32, "0")
self:LableAtlasSetGray(lableAtlas:getVirtualRenderer())
字体置灰也解决,大功告成!
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值