我有一个应用程序,它使用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
(FLOAT
,{FLOAT
{ {1}},FLOAT
,FLOAT
,ONCOMPLETE
,END
)。但是对于第二个补间,当Tween
方法到达END
枚举时,Type
变为0,(所以我看到Type
(FLOAT
,{{ 1}},FLOAT
,EASING
,ONCOMPLETE
)导致执行默认case语句,从而调用断言失败。
我不确定我做错了什么,或者这是否是Marmalade本身的错误?
答案 0 :(得分:1)
我实际上已经解决了这个问题,但我会发布以防万一它会帮助其他人。
我的EndAnimating
方法不是静态的,这导致了Tween
方法中的一些问题。奇怪的是,只有在使用ARM模拟器进行调试时才会出现问题。