m_pWindMallAnim->play(“level1”, true);
在回调函数中停止播放动画,但是不起效果
void WindPlayerScene::onWindMallAnimEnd()
{
m_nCurRollNum++;
if (m_nCurRollNum == 6) { //循环播放6次后结束动画
m_pWindMallAnim->stop();
…
}
}
但是动画还是在一直播放,请问怎么在若干次循环动画后结束动画,引擎是3.4的版本
m_pWindMallAnim->play(“level1”, true);
在回调函数中停止播放动画,但是不起效果
void WindPlayerScene::onWindMallAnimEnd()
{
m_nCurRollNum++;
if (m_nCurRollNum == 6) { //循环播放6次后结束动画
m_pWindMallAnim->stop();
…
}
}
但是动画还是在一直播放,请问怎么在若干次循环动画后结束动画,引擎是3.4的版本
这的确有这个问题,找到CCActionTimeline::step(float delta) 中203 行,
if(_time < _endFrame * _frameInternal)
改为:
if(_time < (_endFrame + 1) * _frameInternal)
即可。
更加严谨的改法应该是这样的:
void ActionTimeline::step(float delta)
{
if (!_playing || _timelineMap.size() == 0 || _duration == 0)
{
return;
}
_time += delta * _timeSpeed;
const float endtoffset = _time - _endFrame * _frameInternal;
if(endtoffset < _frameInternal)
{
_currentFrame = (int)(_time / _frameInternal);
stepToFrame(_currentFrame);
if (endtoffset > 0 && _lastFrameListener != nullptr) // last frame
_lastFrameListener();
}
else
{
_playing = _loop;
if(!_playing)
{
_time = _endFrame * _frameInternal;
if(_currentFrame != _endFrame)
{
_currentFrame = _endFrame;
stepToFrame(_currentFrame);
if(_lastFrameListener != nullptr) // last frame
_lastFrameListener();
}
}
else
gotoFrameAndPlay(_startFrame, _endFrame, _loop);
}
}