安卓平台上,帧动画发生不规则抖动

感觉可以检查下帧图片是否有像素级别的差异

我们就是用的cocostudio 暂时没发现没出现这种,而且打包出来的大小跟TP差的不多

我有发现官方sprite的一个问题,如果你也是代码播放序列帧的话就查一下 tp打包时是否有设置trim 把trim设为none可能能解决这个问题。。如果一定要trim,那么创建sprite时要设置
sprite.sizeMode = cc.Sprite.SizeMode.RAW;

我是在creator里遇到这个问题的,不确定你的是不是也是这样。你试下。

1赞

我找不到cocos studio里面要如何打包图片……哥们可以告诉一下吗……

我用的是-x不是creator,而且测试过即使禁用trim也同样有问题,不过也谢谢你,我看看你的方法能不能奏效吧:)

实验证明,即使使用cocos studio合图,如果使用了裁剪功能,也一样会出现抖动问题。这从侧面再次说明了,这个抖动是引擎内部的bug,与合图工具没有关系。
我可以不使用裁剪功能,但还有另一个问题是在游戏中我必须密拼地块以形成完整的战场地图。texturepacker提供的extrude功能可以使得密拼时没有黑线,但使用tp就会出现动画抖动;cocos studio的合图可以不出现抖动,但没有类似extrude的功能,也就是会导致密拼黑线。我知道引擎还提供了一个CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL的宏用来处理密拼黑线问题,但使用这个宏副作用也非常大,所以还是不可用。
还是那句,官方能否出来说明一下如何解决?我算是求你们了,我真的没办法了。

这个估计要你自己动手了

继续自顶,综合我遇到的其他bug,可以认为这实际上不是CCAnimation的问题,而是引擎解析plist或渲染贴图的时候,位置莫名其妙的发生了少量偏移。

不好意思,这几天比较忙,没空上来回复问题。我会用最新的版本测试一下看看。

谢谢,请问进度如何?如果需要更多相关信息请随时问我:slightly_smiling:

那个地图也太小了吧,我在华为的p9上测试都看不清楚是什么东西,也就没看到卡顿了。

不是卡顿而是抖动。我没把整个地图写进代码里,运行时所显示的只是地图上的一个格子(具体来说是一块沙滩连同海水)的动画。动画正常播放的情况下,这个格子下半部的黄色沙滩应该是完全静止不动的(正如pc版运行的效果),但手机上你仔细看可以看到沙滩每一帧都在轻微抖动。上面已经不少人留言说遇到了相同的问题,所以基本可以确定是引擎问题。还请再测试一次,谢谢!

我在上面给出的demo是重现这个bug的最小代码,只改动了HelloWorldScene.cpp,增加了下面这几行(从第75行开始):

/////////////////////////////
// 4. reproduce the bug!
auto spriteFrameCache = SpriteFrameCache::getInstance();
spriteFrameCache->addSpriteFramesWithFile("BabyWarsTextureTile.plist");

auto frames = Vector<SpriteFrame*>();
for (auto i = 1; i <= 8; ++i) {
	auto name = std::string("c01_t04_s02_f0") + static_cast<char>(i - 1 + '1') + ".png";
	frames.pushBack(spriteFrameCache->getSpriteFrameByName(name));
}
auto bugAnimation = Animation::createWithSpriteFrames(frames, 0.2);

auto bugSprite = Sprite::create();
bugSprite->setPosition(100, 150);
bugSprite->runAction(RepeatForever::create(Animate::create(bugAnimation)));
this->addChild(bugSprite);

这段代码的作用仅仅就是载入了一个plist并用其中某几个图片组成了帧动画并播放。
如果你觉得看不清,可以插入一行:
bugSprite->setScale(3); //或其他数字
相信会看的更清楚。再次恳请百忙之中再测试一下,谢谢了!

@babygogogo, 这个问题是只在android平台才出现?PC没问题?

对,至少在我这里是这样。另外我在别的帖子里看到有人在ios上也出现了同样的问题。
如果你方便的话,把上面的demo在pc和安卓上分别跑一下,区别很明显的。 @dumganhar

ios上重现了,但是android和mac都没重现。:sweat:
我看看这个问题吧。

OpenGLES2.0标准里面,纹理最大为:2048x2048, 而你用的是4096 × 2048。尝试修改到合理范围内试试?

刚刚测试了,去掉了部分资源把纹理降为20482048,问题依然存在。另外我询问了一些玩家(都是安卓平台不过设备不同),他们当中的大部分人都会遇到抖动和轻微错位的问题,但也有少数没有错误。还请继续跟进,拜托了!:joy:
顺便附上2048
2048的demo:AnimationBug.zip (1.1 MB)

没有这个标准,各个设备不同,iPhone上es2.0支持到4096

好的,我再确认一下。