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

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

谢谢,请问进度如何?如果需要更多相关信息请随时问我: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

好的,我再确认一下。

嗯,是的。从opengles参数拿到的的确为4096。

请问有啥进度没?

还没有进展,还在看。

辛苦了,祝顺利!

能否把c01_t04_s02_f05.png这块的内容都变成黑色?

如果仅仅调试用是可以的,正式游戏内就肯定不行了。或者如果你方便的话,我也可以把碎图发给你,你自己调整下打包设置或颜色什么的?

只是测试。
没事,我自己用软件修改了。

辛苦了,碎图已经私信你了,希望能帮上忙。