cocos2d-x 2.x 获取当前动画是第几帧 (修复之前无法获取第几帧问题)

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=391

有些人跟我QQ留言说 cocos2d-x获取当前动画是第几帧里面的方法已经不能对比到第几帧了,我看了下代码,找到了这个

CCSpriteFrame* CCSprite::displayFrame(void)
{
    return CCSpriteFrame::createWithTexture(m_pobTexture,
                                           CC_RECT_POINTS_TO_PIXELS(m_obRect),
                                           m_bRectRotated,
                                           CC_POINT_POINTS_TO_PIXELS(m_obUnflippedOffsetPositionFromCenter),
                                           CC_SIZE_POINTS_TO_PIXELS(m_obContentSize));
}


大家看到了吧,到这里估计有人看出来问什么对比不到第几帧了吧。

当你调用displayFrame的时候,它重新生成了一个新的CCSpriteFrame对象给你,你拿着它和原来的作地址对比,肯定不相同,所以为什么不能找到相同的。


那么是不是就没有办法了呢?


想一下,相同帧不就是贴图相同吗?所以看下Texture,果然看到这个

GLuint CCTexture2D::getName()
{
    return m_uName;
}

返回当前Texture的Name,这个name是GLuint,你可以看成它的ID,每个Texture都是唯一的ID。


所以把之前的对比方法稍微修改下就可以了。


下面是修改好之后的

int currentAnimIndex = 0; //精灵当前播放的是第几帧
    for(int i = 0; i < 5; i++)
    {
        //5张图5帧
        GLuint tID = prite->getTexture()->getName();
        CCSpriteFrame* animFrame = (CCSpriteFrame*)anim->getAnimation()->getFrames()->objectAtIndex(i);
        if(tID == animFrame->getTexture()->getName()){
            //这个i返回的只是一个索引,如果帧数是从1开始计算就要+1
            currentAnimIndex = i+1;
        }
    }


现在可以获取到第几帧了,解决起来也不是很难,希望大家遇到问题,可以自己尝试这去找出原因,知道了原因就有解决的办法。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值