fixed emit last frame several times

This commit is contained in:
kaile.yin 2014-10-17 20:43:01 +08:00
parent 871b440fc7
commit 5b0e2f0304
3 changed files with 25 additions and 9 deletions

View File

@ -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("")
{

View File

@ -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();

View File

@ -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,13 +228,19 @@ 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();