cocos2d / cocos2d-x

Cocos2d-x is a suite of open-source, cross-platform, game-development tools utilized by millions of developers across the globe. Its core has evolved to serve as the foundation for Cocos Creator 1.x & 2.x.
https://www.cocos.com/en/cocos2d-x
18.16k stars 7.05k forks source link

Animation not working in Lua running on iOS devices #15098

Open rraallvv opened 8 years ago

rraallvv commented 8 years ago

I’m using the following snippet to create an animation in a blank project created with Cocos using the precompiled version of Cocos2d-x v3.10, both for C++ and Lua.

C++

// Animation test
auto visibleSize = Director::getInstance()->getVisibleSize();

auto pterodactyl = Sprite::create("frame1.png");
pterodactyl->setPosition(visibleSize.width / 2, visibleSize.height / 2);

auto animation = Animation::create();
int i, number;
std::string name;
for (i = 1; i <= 3; i++) {
    number = i;
    name = "frame" + std::to_string(number) + ".png";
    animation->addSpriteFrameWithFile(name);
}

animation->setDelayPerUnit(0.5 / 3.0);
animation->setRestoreOriginalFrame(true);
animation->setLoops(-1);

auto animate = Animate::create(animation);
pterodactyl->runAction( animate );

auto moveOut = MoveTo::create(0, Vec2(visibleSize.width + 100, visibleSize.height * 0.8));
auto moveIn = MoveTo::create(4.0, Vec2(-100, visibleSize.height * 0.8));
auto delay = DelayTime::create(2.5);
pterodactyl->runAction(RepeatForever::create(Sequence::create(moveOut, moveIn, delay, NULL) ) );

addChild(pterodactyl);

Lua

--Animation test
local pterodactyl = cc.Sprite:create("frame1.png")
pterodactyl:setPosition(display.cx, display.cy)

local animation = cc.Animation:create()
local number, name
for i = 1, 3 do
    number = i
    name = "frame"..number..".png"
    animation:addSpriteFrameWithFile(name)
end

animation:setDelayPerUnit(0.5 / 3.0)
animation:setRestoreOriginalFrame(true)
animation:setLoops(-1)

local animate = cc.Animate:create(animation)
pterodactyl:runAction( animate ) -- <-- this is not working on iOS devices

local moveOut = cc.MoveTo:create(0, cc.p(visibleSize.width + 100, visibleSize.height * 0.8))
local moveIn = cc.MoveTo:create(4.0, cc.p(-100, visibleSize.height * 0.8))
local delay = cc.DelayTime:create(2.5)
pterodactyl:runAction(cc.RepeatForever:create(cc.Sequence:create(moveOut, moveIn, delay) ) )

self:addChild(pterodactyl)

The problem is that the animation won’t work on iOS devices when cerated with Lua. The sprite looks the same as if the method runAction was not executed.

I tested OS X for both C++ and Lua, and it works ok, also the iOS simulator seems to run the action. On iOS devices (iPod Touch 4g and iPad mini) only C++ seems to work.

xiaofeng11 commented 8 years ago

@geron-cn Please take a look on this issue