Cocos2d-x 中获取动画当前帧数
DionysosLai 2014-4-17
在游戏中有很多动画,这些动画设计的好坏,对游戏的体验性影响很大。比方说敲打类
动作,如果敲打动作比较多,我们在动作结束后,在处理敲击结果,游戏就给用户感觉很迟
钝,有延迟现象。因此,这类动作,我们不能在动作结束后,再处理,而是应该在动作过程
中进行处理。这里就考虑到了获取动画当前帧数问题。
如果获取动画当前帧数?上网百度了一些,方法不多,就两类。不过在我测验过都不能
用。这里有 2 个原因,一个就是版本问题了,另一个原因待会儿再说。
获取动画的原理就是:我们在创建动画时,是根据纹理(CCTexture2D)来生成动画帧
(SpriteFram)的,因此,我们可以比较当前的纹理 ID 来判断动画帧数(也正是,这个原理
导致获取动画当前帧数方法适用性比较小。)
代码如下:
///@brief 返¤¦Ì回?当Ì¡À前¡ã的Ì?动¡¥画-帧?
///@param[in] animate---当Ì¡À前¡ã动¡¥画-
///@pre 这a个?函¡¥数ºy的Ì?方¤?法¤¡§是º?通ª¡§过y获?取¨?当Ì¡À前¡ã纹?理¤¨ªID来¤¡ä实º¦Ì
现?,ê?因°¨°此ä?,ê?使º1用®?范¤?围¡ì是º?当Ì¡À前¡ã纹?理¤¨ªID都?不?一°?样¨´,ê?因°¨°
此ä?如¨?果?从䨮一°?张?大䨮图ª?中D根¨´据Y位?置?抽¨¦取¨?动¡¥画-数ºy据Y,ê?不?可¨¦用
®?。¡ê
///@return currentAnimIndex---当Ì¡À前¡ã动¡¥画-帧? -1---获?取¨?失º¡ì败㨹
///@retval
///@post
///@author DionysosLai,ê?906391500@qq.com
///@version 1.0(2014-04-16)
///@data 2014-04-16
int RoleSprite::getCurrentFrameWithPngs( const CCAnimate* animate)
{
int currentAnimIndex = 0;
unsigned int frameSum = animate->getAnimation()->getFrames()->capacity(); /// 获?取¨?
动¡¥作Á¡Â的Ì?总Á¨¹帧?数ºy
for(unsigned int i = 0; i < frameSum; i++)
{
GLint iID = this->getTexture()->getName(); ///< 获?取¨?精?灵¢¨¦当Ì¡À前¡ã
纹?理¤¨ªID
/// 依°¨¤次ä?获?取¨?动¡¥画-帧?,ê?根¨´据Y动¡¥画-帧?获?取¨?其?纹?理¤¨ªID
CCAnimationFrame* animFrame
=(CCAnimationFrame*)animate->getAnimation()->getFrames()->objectAtIndex(i);
GLint iID1 = animFrame->getSpriteFrame()->getTexture()->getName();
if (iID1 == iID)
{
currentAnimIndex = i;
return currentAnimIndex;
}
}
评论0
最新资源