我有一个将Tween方法用于许多动画的应用程序。补间之一是以下内容:

pipe_Tweener.Tween(3.2f,
    FLOAT, &pSprite->m_X, (float) -pSprite->GetImage()->GetWidth(),
    FLOAT, &pSprite->m_Y, (float) pSprite->m_Y,
    FLOAT, &pSprite->m_X, (float) -pSprite->GetImage()->GetWidth(),
    FLOAT, &pSprite->m_Y, (float) pSprite->m_Y,
    ONCOMPLETE, &Game::ResetP,
    END);

另一个是:
pipe_Tweener.Tween(JUMP_TIME,
    FLOAT, &bSprite->m_X, (float) bSprite->m_X,
    FLOAT, &bSprite->m_Y, (float) bSprite->m_Y-JUMP_HEIGHT,
    EASING, Ease::sineOut,
    ONCOMPLETE, &Game::EndAnimating,
    END);

当使用x86调试进行调试时,这些补间似乎可以正常工作。但是,当我使用GCC ARM调试时,最终在IwTween.cpp的第360行出现IwAssert错误。
我已经调试了Tween方法,并且注意到,对于我的第一个补间来说,一切都很好,我可以看到该方法遍历了每个Type(FLOATFLOATFLOATFLOATONCOMPLETEEND)。但是对于第二个补间,当Tween方法进入END枚举时,Type变为0(因此我看到Type(FLOATFLOATEASINGONCOMPLETE0,ojit_code)导致默认case语句执行,从而调用断言失败。

我不确定我是在做错什么还是这是果酱本身的错误?

最佳答案

我实际上已经解决了这个问题,但我会发贴,以免对其他人有帮助。
我的EndAnimating方法不是静态的,这在Tween方法中引起了一些问题。奇怪的是,它仅在使用ARM仿真器进行调试时才引起问题。

07-25 22:05
查看更多