Shader修改颜色出现不透明框

原本想做个shader,用来完成对图片色相,饱和度,亮度的调整,结果根据转换算法描述写完之后发现一个很严重的问题,就是原本图片是透明的地方在调整了亮度之后出现了不透明的色块(仅增大会出现)。后来将shader简化,仅将图片做红偏色。原图如下:
无标题2

结果做完shader变成下面这样:

gl_FragColor = vec4(r + 0.3, g, b, a);

无标题

经过一番尝试,后来发现改成这样均正常

gl_FragColor = vec4(r * 1.3, g, b, a);
gl_FragColor = vec4(r  + r * 0.3, g, b, a);

无标题1

总结,大抵是shader里面不能直接用加减单位来修改RGB值,只能用乘除法来做,大概猜测是因为色彩的单位并不是我们以为的[0, 1]吧,具体原因以后再具体分析吧。

细数cocos2d踩过的那些坑

cocos2d-x版本:3.2
cocostudio版本:1.6.0
开发语言:Lua,使用cocos本身导出的Lua的API

cocostudio相关:

1. 骨骼设置隐藏时,若该骨骼动作的第一帧是没有渲染贴图的,则设置会失效,查看源码如下:

void DisplayManager::setVisible(bool visible)
{    
	if(!_displayRenderNode)
		return;
	_visible = visible;
    _displayRenderNode->setVisible(visible);
}

_visible = visible;

提到第一句即可。

2. 子骨骼在动作里没有父骨骼的情况下会全部乱掉,并没有通过源码发现。

3. 换贴图的情况下,如果编辑器动作是通过不渲染贴图的方式来做,那么实际播放中如果有换装则会导致隐藏失效,并没有通过源码发现。

将cocos2dx里的lua升级至5.3

由于项(ge)目(ren)需(xing)要(qu),决定将项目的代码升级到最新的5.3.0版,源码点这下载

由于cocos2d-x是个跨平台项目,所以要分别对windows,android,ios三个环境均要做一定修改。而由于cocos2d-x默认是使用luajit的,而最新的luajit并不支持Lua5.3,所以作为代价就是放弃jit带来的效率提升,然而这个对我们的项目其实并没有什么影响(游戏玩法决定不需要太注重效率)
继续阅读

cocos2d-x的锚点与坐标

最近被cocos2d-x的坐标问题绕晕了头,这里整理下。

position: 每个node都有一个position,这个position是相对于它的父节点的坐标,所谓的世界坐标可以认为就是直接挂载在scene下的node的坐标。
AnchorPoint:每个node都会有自己的AnchorPoint,它的作用仅在于在设置position时,是将图片中的哪个点设置到那个位置。

需要注意的是
1 position是逻辑位置,而不是实际像素
2 这个坐标系与windows的坐标系的y轴是反的,cocos2d里(0,0)是在左下角,而不是左上角。
3 每个node的position都是相对父节点的(0,0)的位置,与父节点的锚点无关!我就是因为这个问题没搞清楚在这里绕晕了……

Cocos2d-x 3.2 Lua 在Android设备闪退问题解决记录

描述:iOS设备运行正常,windows环境下模拟器程序运行正常,但是Android设备大多数都有运行一段时间闪退的问题。

第一次运行android设备上时使用版本3.0,后来升级到3.1.1,再到3.2,Android闪退问题一直存在,尤其是在红米系列设备,几乎必现。
因为对Android开发不是很熟悉,没法直接定位到导致crash的地方,于是请教了同事,后发现是打包的API版本过高,修改后闪退问题有明显好转,但是依然存在,最近项目进度不是那么赶,于是决定要彻底追查这个问题。
继续阅读

cocos2d-x中搭配Box2D使用PhysicsEditor

最近开始使用cocos2dx里的物理引擎,多边形是必不可少的,如果是自己手写顶点的话就太……了。所幸的是已经有人做了一款支持导入的软件,它就是PhysicisEditor(下载地址)(除了Box2D外,也支持chipmunk等多款引擎),而且Example中自带cocos2dx的解析CPP(已经过时,不过我已经修改了下,使其支持最新的cocos2dx 3.0 alpha1,打算跟作者沟通下,让其更新出去),这款软件虽然不是免费的,但是可以通过向作者发申请来获得授权(鄙人就是这么得到的,呵呵)。

申请license网址:http://www.codeandweb.com/request-free-license 

好了,废话不多说,简介下这款软件,界面如下图: 继续阅读

【cocos2d-x】控制台直接输入Lua指令

用脚本进行开发,如果不能实时去输入指令,就丧失了脚本的一大特色,所以对cocos2d-x程序稍微修改下,使其可以直接从控制台读入lua指令,方便调试。

改进版见这里

这里我们采用最简单的方法,直接修改main.cpp。

1 首先在行首加入lua的引用,如下

#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"
#include "CCLuaEngine.h"

2 在main函数前面插入以下代码

继续阅读