mirror of https://github.com/axmolengine/axmol.git
fixed emit last frame several times
This commit is contained in:
parent
871b440fc7
commit
5b0e2f0304
|
@ -36,6 +36,7 @@ NS_TIMELINE_BEGIN
|
|||
Frame::Frame()
|
||||
: _frameIndex(0)
|
||||
, _tween(true)
|
||||
, _enterWhenPassed(false)
|
||||
, _timeline(nullptr)
|
||||
, _node(nullptr)
|
||||
{
|
||||
|
@ -554,6 +555,7 @@ EventFrame* EventFrame::create()
|
|||
EventFrame* frame = new (std::nothrow) EventFrame();
|
||||
if (frame)
|
||||
{
|
||||
frame->init();
|
||||
frame->autorelease();
|
||||
return frame;
|
||||
}
|
||||
|
@ -561,6 +563,11 @@ EventFrame* EventFrame::create()
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
void EventFrame::init()
|
||||
{
|
||||
_enterWhenPassed = true;
|
||||
}
|
||||
|
||||
EventFrame::EventFrame()
|
||||
: _event("")
|
||||
{
|
||||
|
|
|
@ -54,6 +54,8 @@ public:
|
|||
virtual void setTween(bool tween) { _tween = tween; }
|
||||
virtual bool isTween() const { return _tween; }
|
||||
|
||||
virtual bool isEnterWhenPassed() { return _enterWhenPassed; }
|
||||
|
||||
virtual void onEnter(Frame *nextFrame) = 0;
|
||||
virtual void apply(float percent) {}
|
||||
|
||||
|
@ -68,6 +70,7 @@ protected:
|
|||
|
||||
unsigned int _frameIndex;
|
||||
bool _tween;
|
||||
bool _enterWhenPassed;
|
||||
|
||||
Timeline* _timeline;
|
||||
cocos2d::Node* _node;
|
||||
|
@ -300,6 +303,7 @@ class CC_STUDIO_DLL EventFrame : public Frame
|
|||
{
|
||||
public:
|
||||
static EventFrame* create();
|
||||
void init();
|
||||
|
||||
EventFrame();
|
||||
|
||||
|
|
|
@ -210,10 +210,9 @@ void Timeline::updateCurrentKeyFrame(int frameIndex)
|
|||
}
|
||||
else if(frameIndex >= _frames.at(length - 1)->getFrameIndex())
|
||||
{
|
||||
from = to = _frames.at(length - 1);
|
||||
_currentKeyFrameIndex = _frames.at(length - 1)->getFrameIndex();
|
||||
_betweenDuration = 0;
|
||||
break;
|
||||
int lastFrameIndex = _frames.at(length - 1)->getFrameIndex();
|
||||
if(_currentKeyFrameIndex >= lastFrameIndex)
|
||||
return;
|
||||
}
|
||||
|
||||
do
|
||||
|
@ -229,14 +228,20 @@ void Timeline::updateCurrentKeyFrame(int frameIndex)
|
|||
}
|
||||
|
||||
to = _frames.at(_toIndex);
|
||||
|
||||
if (frameIndex == from->getFrameIndex())
|
||||
{
|
||||
if(from->getFrameIndex() == 19)
|
||||
int a = 0;
|
||||
if(frameIndex == from->getFrameIndex())
|
||||
break;
|
||||
}
|
||||
if(frameIndex > from->getFrameIndex() && frameIndex < to->getFrameIndex())
|
||||
break;
|
||||
if(from->isEnterWhenPassed())
|
||||
from->onEnter(to);
|
||||
}
|
||||
while (frameIndex < from->getFrameIndex() || frameIndex >= to->getFrameIndex());
|
||||
while (true);
|
||||
|
||||
if(_fromIndex == length)
|
||||
to = from;
|
||||
|
||||
_betweenDuration = to->getFrameIndex() - from->getFrameIndex();
|
||||
|
||||
} while (0);
|
||||
|
|
Loading…
Reference in New Issue