【cocos2d-x 3.0所谓"FINAL"版的各种操蛋bug,发现即更新】这么多坑,建议各位暂时不要尝鲜

之前一个即时战略rpg的游戏项目,花了3天移植到3.0上来了,发现各种bug,来论坛提交bug,提交的时候,提示标签不能超过5个,然后之前输入的内容全没了,2b到家,而且提示的messagebox在屏幕看不到的位置,拉滚动条之后才发现错误框。用的是chrome,真特么火大。论坛的问题就先不说了,来说说cocos2d 3.0我为的FINAL版的bugs!

bug1:
http://www.cocoachina.com/bbs/read.php?tid=202214
bool Texture2D::initWithData(const void *data, ssize_t dataLen, Texture2D::PixelFormat pixelFormat, int pixelsWide, int pixelsHigh, const Size& contentSize)
{
CCASSERT(dataLen>0 && pixelsWide>0 && pixelsHigh>0, “Invalid size”);

//if data has no mipmaps, we will consider it has only one mipmap
MipmapInfo mipmap;
mipmap.address = (unsigned char*)data;
mipmap.len = static_cast<int>(dataLen);
return initWithMipmaps(&mipmap, 1, pixelFormat, pixelsWide, pixelsHigh);


//update information
_contentSize = contentSize;
_maxS = contentSize.width / (float)(pixelsWide);
_maxT = contentSize.height / (float)(pixelsHigh);

}

CCTexture2D.cpp: 546行。
这中间就return了是什么意思??下面还继续用contenSize,这代码质量?太不负责任了吧??如果有别的nb意义,能不能把return下面那些玩意注释一下??Texture2D这么重要的一个类,居然有这么蛋疼的地方!!

bug2:
ClippingNode::setAlphaThreshold,在2.x中,设置setAlphaThreshold 小于 1之后,镂空位置没问题。在3.0中,只要设置了setAlphaThreshold小于1的任意值,镂空位置就会跑到左下角。不知道是什么狗屁问题,懒着去跟。

bug3:
两个localZ相等的sprite,在runAction的时候,会出现闪烁现象,就好像,渲染覆盖先后顺序会不停的变换一样。我只能把其中一个localZ+1之后才解决。在2.x中就没有这问题!

RenderTexture在3.0下更蛋疼,如果不手动调用下Director::getInstance()->getRenderer()->render()的话,用RenderTexture的getSprite的时候还会崩溃,不要告诉我什么在下一帧才会去真正的去渲染RenderTexture。

还有一些bug记不起来了,麻烦引擎开发对外说这是3.0beta好不好,别把b去掉,final你妹啊。
最后提醒各位开发者,慎用3.0,入坑需谨慎!

=============== 后续发现的BUG更新如下 =================
2014-05-23 再增一个BUG!
Label在设定demensions的时候,文字超过size范围后回vector越界访问。

auto info = & theLabel->_lettersInfo.at( index );
比如此处_lettersinfo.size()为23,而index为24,越界时时index往往比size大1
CCLabelTextFormatter.cpp: 223

我现在掉在坑里hai没爬上来呢

经理看到3.0出正式版了,打算下个项目用3.0做,看你们这么说我都没底了…:893:

bug3:
两个localZ相等的sprite,在runAction的时候,会出现闪烁现象,就好像,渲染覆盖先后顺序会不停的变换一样。我只能把其中一个localZ+1之后才解决。在2.x中就没有这问题!
这的确是一个让人忧伤的bug

官方给个解释:2:

伸手党们你们有什么资格喷,有bug你不会去提交一下?!一个开源免费的框架,多少人免费的在维护,你们一出bug就来论坛喷。有没有想过,你付出了多少,维护团队付出了多少!

bug3:
两个localZ相等的sprite,在runAction的时候,会出现闪烁现象,就好像,渲染覆盖先后顺序会不停的变换一样。我只能把其中一个localZ+1之后才解决。在2.x中就没有这问题!

人家是要向3d引擎靠拢~~ 相同深度的面重叠会导致渲染冲突,这个是正常的~:12::12:

bug3:这个是Node排序用了stl sort快排,这个是不稳定排序,导致绘制层级不对~~

偏激了。。。:5:

刚看了下代码,排序用的规则是这样的:
bool nodeComparisonLess(Node* n1, Node* n2)
{
return( n1->getLocalZOrder() < n2->getLocalZOrder() ||
( n1->getLocalZOrder() == n2->getLocalZOrder() && n1->getOrderOfArrival() < n2->getOrderOfArrival() )
);
}
localZOrder一样的情况下,会有个OrderOfArrival的限定。

一个childe被add的时候 会调用child->setOrderOfArrival(s_globalOrderOfArrival++);

这个值在很长一段时间内应该是不可能相同的(除非int溢出),
// XXX: Yes, nodes might have a sort problem once every 15 days if the game runs at 60 FPS and each frame sprites are reordered.
int Node::s_globalOrderOfArrival = 1;

一个节点的localZOrder相等且OrderOfArrival也相等的情况需要特别长的时间才能出现吧。
会不会是其他的原因?

错!我所喷的,都已经在cocos2d-x.org提交了,之前也提交过一些2.x的bug!
直接说成是FINAL版,不觉得令人很恼火么!

draw时候 _orderOfArrival会reset为0 ,你将那行注释掉就Ok了,应该,我从3.0alpha开始被坑,一个版本一个版本的坑到正式版~~~

我现在不管了,反正项目死活要用3.0,我就死命改引擎,刚把UI动画部分的架构改了

确实得自己动手改,但是引擎版本就不方便更新了

正解,这才是真正目的

再增一个BUG!
Label在设定demensions的时候,文字超过size范围后回vector越界访问

auto info = & theLabel->_lettersInfo.at( index );
CCLabelTextFormatter.cpp: 223

此贴的价值大于那些只唱赞歌的。
相信引擎开发组也是这么认为的。

XP系统下面会无法播放声音?不知道这是个什么问题?

这个帖子有必要顶一下

我也掉坑里,上不来了,欲哭无泪呀。 请看: http://www.cocoachina.com/bbs/read.php?tid=203043