近期開始用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)-图片载入与混合模式的更多相关文章

  1. 安卓图片载入之使用universalimageloader载入圆形圆角图片

    前言 话说这universalimageloader载入图片对搞过2年安卓程序都是用烂了再熟悉只是了.就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimagelo ...

  2. Android图片载入框架最全解析(一),Glide的基本使用方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号.扫一扫文章底部的二维码或在微信搜索 郭 ...

  3. Android批量图片载入经典系列——afinal框架实现图片的异步缓存载入

    一.问题描写叙述 在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存载入,接下来我们再介绍一下afinal 框架的使用. Afinal 是一个android的http框架.sql ...

  4. Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案

    Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案 1. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 1.1. div来完成  ...

  5. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...

  6. Android图片载入缓存框架Glide

    Glide开源框架是Google推荐的图片载入和缓框架,其在Github上的开源地址是:https://github.com/bumptech/glide 当然一个Google推荐的框架肯定就是Vol ...

  7. Android开发之搜芽项目的图片载入问题(使用Volley进行网络图片载入)

    搜芽的移动开发这几天进度相对来说很的快. 可是美中不足的就是网络图片的载入问题. 我有两套方案: 1)沿用迅雷动漫的图片载入.迅雷动漫也是用的一个开源的库.可是不知道是我使用出了问题还是真的是它的问题 ...

  8. SAP接口编程 之 JCo3.0系列(01):JCoDestination

    SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...

  9. 高屋建瓴 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 ...

随机推荐

  1. SQL Server R2 2008中的SQL Server Management Studio 阻止保存要求重新创建表的更改问题的设置方法

    在2008中会加入阻止保存要求重新创建表的更改这个选项.症状表现为修改表结构的时候会"阻止"你. SQL Server 2008“阻止保存要求重新创建表的更改”的错误的解决方案是本 ...

  2. [转] Android自动化测试之MonkeyRunner录制和回放脚本(四)

    测试脚本录制: 方案一: 我们先看看以下monkeyrecoder.py脚本: #Usage: monkeyrunner recorder.py #recorder.py  http://mirror ...

  3. C++中巧妙的位运算

    位运算要多想到与预算和异或运算,并常常将两个数对应位上相同和不同分开处理 一.x&(x-1)消除x二进制中最右边的一个1. 这个比较厉害,比如统计某个 二.与和异或的巧妙结合的思想 与运算可以 ...

  4. 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 ...

  5. 关于SqlParameter中IN子句查询的问题

    今天调试到方法中代码: String hotelCodes =”’’,’’,’’”; string sqltext ="select * from HotelMedalInfo where ...

  6. PASCALmath库

    noi上是让用,noip让用么?貌似不让— — 反正是好东西.在FP中,Math库为我们提供了丰富的数学函数.以下介绍在OI中可能会用到的Math库中一些函数.过程. 使用方法:在程序头用Uses语句 ...

  7. 【转】Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    我的解决方案 一开始,我是依照某本教材,配置了User Libraries(名为struts-2.2.3, 可供多个项目多次使用), 然后直接把struts-2.2.3引入过来(这个包不会真正的放在项 ...

  8. 手把手教你WEB套打程序开发

    WEB套打可选方案不多,理想的更少,利用免费控件Lodop+JavaScript实现精确套打,算是较为经典的选择.这种方案其实比较简单,利用一个htm文件就可以实现模板设计过程,几乎是“空手套”式的开 ...

  9. NGINX(六)扩展

    前言 nginx模块化设计, 添加扩展模块变得容易, 下面开发一个非常简单的扩展模块, 实现返回http请求的头部内容, 配置标记是ping_pong, 配置在NGX_HTTP_LOC_CONF中. ...

  10. POJ3087 Shuffle'm Up 简单模拟

    题意:就是给你两副扑克,然后一张盖一张洗牌,不断重复这个过程,看能不能达到目标的扑克顺序 分析:然后就模拟下,-1的情况就是有循环节 #include<cstdio> #include&l ...