Cocos2d-x 3.0心得(01)-图片载入与混合模式
近期開始用cocos2dx 3.0做东西,略有心(cao)得(dian),略微作下记录吧。
v3.0相对v2.2来说,最引人注意的,应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯。不枉我改了那么多类名。
话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。
这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。
v3.0在载入图片方面也有了非常大改变,仅仅只是是藏在水下的,不到出问题的时候就不easy发觉。
简单来说,v2.2和之前的版本号,在iOS上,cocos2dx是利用原生的UIImage来载入图片,png、jpg之类的。
大致的步骤:先用UIImage载入图片,再创建一个渲染环境并提供一个buffer,作为渲染的缓存,然后把UIImage(包括的CGImage)绘制到这个环境中,这时候buffer里面就是图片的像素数据了。能够用来创建gl纹理了。
v3.0不再用iOS原生库载入图片。而是用了第三方的libpng、libjpeg等等库,在cocos2d/external以下能找到。
新的方式不须要中间建渲染环境绘制的步骤。而是直接从图片文件解析到buffer。然后就能创建gl纹理。
这个改动。无论是从效率还是代码一致性来看,都是一件好事。只是相对的。也带来了一些不习惯的东西。
用v3.0做粒子会发现。用同样的设置,同样的图片。曾经好端端的效果。到了新版本号以下变成了一堆色块。查了一阵。最后把粒子的混合模式(BlendFunc),从src = GL_ONE,dst = GL_ONE。改成src = GL_SRC_ALPHA。dst = GL_ONE,结果就恢复正常了。
原因也不复杂。首先。我们使用的图片是一张纯白的、但又带半透明的图片,
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2luZ2xlV2l6YXJk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">也就是。图片的RGB值是全255,但Alpha则是0
~ 255,依据每一个像素的透明程度而定。在不论什么一个看图软件上。这张图都是中间白色、往四周逐渐变透明的亮度图。由于有alpha通道作半透明混合。
但在程序上,src = GL_ONE表示忽略掉图片的alpha,直接使用RGB值来跟目标混合,由于图片的RGB是全255,所以渲染结果就成了全白的色块。改成src = GL_SRC_ALPHA,才会用图片alpha对RGB进行调制,得到正确的结果。
嗯,那为什么曾经没问题?由于曾经载入图片。中间有一个从CGImage绘制到buffer的步骤,这个步骤里。实际上已经用图片的alpha对RGB进行了调制,所以buffer里面的RGB已经不是图片原始的RGB了,结果肯定就不一样了。顺便,假设用v2.2或者之前的版本号。发现有些图片或者粒子,在iOS上面显示正常,在Android上面是色块,非常可能跟这有关系。最好还是试试改混合模式。
要想保留src = GL_ONE的设置,也不是没办法。对图片作预乘alpha(Premultiplied Alpha),也就是。用图片的alpha先对RGB进行调制,然后存回RGB中,这种图片,就能够继续用src = GL_ONE了。能作这种处理的工具。嗯,TexturePacker就是一个。
好了,关于混合模式,最后再来吐槽一下cocos2dx和cocosbuilder。
1、cocosbuilder里,图片载入用的应该是原生库。所以用cocos2dx v3.0,在builder上没有所见即所得的效果。
2、cocosbuilder里,假设CCSprite的混合模式设为src = one,dst = one - src alpha,那么在导出ccbi时,会忽略混合模式这一项坑爹哪。省这几个字节有半毛钱用?
3、cocos2dx 3.0。从cocosbuilder解析粒子的时候,当解析到纹理这一步,会偷偷改掉混合模式嗯哼,实际上,在对精灵和粒子设置Texture的时候。都能看到改动混合模式的身影。不用说,这绝壁是为了解决像上面那种混合的问题。可是对于那些想自己控制混合方式的人来说……反正。我是在美术跟我抱怨n次改了粒子混合模式没什么效果之后,才发现的
Cocos2d-x 3.0心得(01)-图片载入与混合模式的更多相关文章
- 安卓图片载入之使用universalimageloader载入圆形圆角图片
前言 话说这universalimageloader载入图片对搞过2年安卓程序都是用烂了再熟悉只是了.就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimagelo ...
- Android图片载入框架最全解析(一),Glide的基本使用方法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...
- Android批量图片载入经典系列——afinal框架实现图片的异步缓存载入
一.问题描写叙述 在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存载入,接下来我们再介绍一下afinal 框架的使用. Afinal 是一个android的http框架.sql ...
- Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案
Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案 1. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 1.1. div来完成 ...
- Android Handler 异步消息处理机制的妙用 创建强大的图片载入类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...
- Android图片载入缓存框架Glide
Glide开源框架是Google推荐的图片载入和缓框架,其在Github上的开源地址是:https://github.com/bumptech/glide 当然一个Google推荐的框架肯定就是Vol ...
- Android开发之搜芽项目的图片载入问题(使用Volley进行网络图片载入)
搜芽的移动开发这几天进度相对来说很的快. 可是美中不足的就是网络图片的载入问题. 我有两套方案: 1)沿用迅雷动漫的图片载入.迅雷动漫也是用的一个开源的库.可是不知道是我使用出了问题还是真的是它的问题 ...
- SAP接口编程 之 JCo3.0系列(01):JCoDestination
SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...
- 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)
Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...
随机推荐
- SQL Server R2 2008中的SQL Server Management Studio 阻止保存要求重新创建表的更改问题的设置方法
在2008中会加入阻止保存要求重新创建表的更改这个选项.症状表现为修改表结构的时候会"阻止"你. SQL Server 2008“阻止保存要求重新创建表的更改”的错误的解决方案是本 ...
- [转] Android自动化测试之MonkeyRunner录制和回放脚本(四)
测试脚本录制: 方案一: 我们先看看以下monkeyrecoder.py脚本: #Usage: monkeyrunner recorder.py #recorder.py http://mirror ...
- C++中巧妙的位运算
位运算要多想到与预算和异或运算,并常常将两个数对应位上相同和不同分开处理 一.x&(x-1)消除x二进制中最右边的一个1. 这个比较厉害,比如统计某个 二.与和异或的巧妙结合的思想 与运算可以 ...
- poj 3278 Catch That Cow (bfs)
题目:http://poj.org/problem?id=3278 题意: 给定两个整数n和k 通过 n+1或n-1 或n*2 这3种操作,使得n==k 输出最少的操作次数 #include<s ...
- 关于SqlParameter中IN子句查询的问题
今天调试到方法中代码: String hotelCodes =”’’,’’,’’”; string sqltext ="select * from HotelMedalInfo where ...
- PASCALmath库
noi上是让用,noip让用么?貌似不让— — 反正是好东西.在FP中,Math库为我们提供了丰富的数学函数.以下介绍在OI中可能会用到的Math库中一些函数.过程. 使用方法:在程序头用Uses语句 ...
- 【转】Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
我的解决方案 一开始,我是依照某本教材,配置了User Libraries(名为struts-2.2.3, 可供多个项目多次使用), 然后直接把struts-2.2.3引入过来(这个包不会真正的放在项 ...
- 手把手教你WEB套打程序开发
WEB套打可选方案不多,理想的更少,利用免费控件Lodop+JavaScript实现精确套打,算是较为经典的选择.这种方案其实比较简单,利用一个htm文件就可以实现模板设计过程,几乎是“空手套”式的开 ...
- NGINX(六)扩展
前言 nginx模块化设计, 添加扩展模块变得容易, 下面开发一个非常简单的扩展模块, 实现返回http请求的头部内容, 配置标记是ping_pong, 配置在NGX_HTTP_LOC_CONF中. ...
- POJ3087 Shuffle'm Up 简单模拟
题意:就是给你两副扑克,然后一张盖一张洗牌,不断重复这个过程,看能不能达到目标的扑克顺序 分析:然后就模拟下,-1的情况就是有循环节 #include<cstdio> #include&l ...