gpt4 book ai didi

c++ - 我怎样才能 'reuse' cocos2d::action?

转载 作者:行者123 更新时间:2023-11-28 00:15:40 25 4
gpt4 key购买 nike

我正在尝试使用 cocos2d-x 制作动画序列。我想一个接一个地向下移动 Sprite 一定距离。

这是我的第一次尝试:

auto fallAction = MoveBy::create(0.2f, Vec2(0, -director->getWinSize().height));
auto fallActionEase = EaseIn::create(fallAction, 2.0f);
auto fallStretch = ScaleBy::create(0.1f, 1.0f, 1.2f);
auto fall = Spawn::create(fallActionEase, fallStretch, NULL);
auto landTremble = EaseElasticOut::create(ScaleTo::create(0.5f, _finalScale));

this->getK()->runAction(Sequence::create(Delay::create(0.5f), fall, landTremble));
this->getA()->runAction(Sequence::create(Delay::create(1.0f), fall, landTremble));
this->getW()->runAction(Sequence::create(Delay::create(1.5f), fall, landTremble));

但它不起作用,正如 [此处] ( Reuse cocos2d actions ) 所讨论的那样。

然后我发现I can copy actions ,但后来我还发现 Clonable::copy() 现在已被弃用(似乎它甚至不存在于 v3.6 中!)

我最终嵌套了 lambda,比如 here (第 246 行到 254 行。)

我想以良好的方式“重用”actions!我想要实现的是:

  • 制作上面提到的完全相同的动画
  • 仍在创建 只有一个 Action 来确定 Sprite 的移动
  • 易于维护的代码

编辑:为防止链接失效,我将在嵌套 lambda 的位置粘贴代码。不是很聪明。

auto DesiredAction = Sequence::create(wait4Frog, Fall, Spawn::create(FallSound, LandTremble,CallFunc::create([this, Fall, LandTremble](){
this->getA1()->runAction(Sequence::create(Fall, Spawn::create(LandTremble,CallFunc::create([this, Fall, LandTremble](){
this->getW()->runAction(Sequence::create(Fall, Spawn::create(LandTremble,CallFunc::create([this, Fall, LandTremble](){
this->getA2()->runAction(Sequence::create(Fall, Spawn::create(LandTremble,CallFunc::create([this, Fall, LandTremble](){
this->getZ()->runAction(Sequence::create(Fall, LandTremble, NULL));
}), NULL), NULL));
}), NULL), NULL));
}), NULL), NULL));
}), NULL), NULL);

最佳答案

这个怎么样:

Action* createSequence(float delay)
{
auto fall = Spawn::create(
EaseIn::create(MoveBy::create(0.2f, Vec2(0, -director->getWinSize().height)), 2.0f),
ScaleBy::create(0.1f, 1.0f, 1.2f),
NULL
);
auto landTremble = EaseElasticOut::create((ScaleTo::create(0.5f, _finalScale)));
return Sequence::create(Delay::create(delay), fall, landTremble, NULL);
}

那么你可以使用这个函数:

this->getK()->runAction(createSequence(0.5f));
this->getA()->runAction(createSequence(1.f));
this->getW()->runAction(createSequence(1.5f));

关于c++ - 我怎样才能 'reuse' cocos2d::action?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com