• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - cocos2d 动画不显示 Sprite 表

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:14:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的游戏发生了一些奇怪的错误。任何人都可以帮助我解决这个问题。 我有一个运行游戏,英雄在运行时收集硬币,当英雄接触硬币时,现在我正在展示在粒子制造器的帮助下创建的粒子效果。它工作正常。但是昨天我买了一个软件,它给了我们非常好的粒子效果,但它只能导出为 pngs。所以我制作了 Sprite 表,而不是之前的粒子动画,我把它放在了接触监听器代码中,以便在英雄接触硬币时显示这种效果。不幸的是,它没有显示任何东西。这是我之前的代码:

-(void) checkHeroAndCoins {
float fDelta = 0;
if(m_hero->m_bMagnet)
    fDelta = iDevPixelX(30);

for(Coin *coin in m_drawLayer.children){
    if([coin isKindOfClass:[Coin class]]){
        CGRect rCoin = CGRectMake(coin.position.x - coin.contentSize.width * coin.scaleX / 2.0f - fDelta,
                                  coin.position.y - coin.contentSize.height * coin.scaleY / 2.0f - fDelta,
                                  coin.contentSize.width * coin.scaleX + fDelta * 2, coin.contentSize.height * coin.scaleY + fDelta * 2);
        CGRect rHero = CGRectMake(m_hero.position.x - m_hero.contentSize.width * m_hero.scaleX / 2.0f, m_hero.position.y, m_hero.contentSize.width * m_hero.scaleX, m_hero.contentSize.height * m_hero.scaleY);
        if(CGRectIntersectsRect(rCoin, rHero)){
            coin.tag = DELETED_TAG;
            g_nCoin++;
            [[AppDelegate getDelegate] playSystemEffect:E_COIN];
// this below code is to show the particle effect and its working perfect
              CCParticleSystem *effect = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile"arroweffect.plist"];
        [self addChild:effect];
        effect.position = ccp(self.contentSize.width * self.scaleX / 2, self.contentSize.height * self.scaleY / 2.0f);
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
            effect.scale *= 2;



        }
    }
}
[[AppDelegate getDelegate] saveSetting];
}

但是在我将 Sprite 表作为动画显示效果后,它不起作用,我尽了最大努力但无法解决这个问题。这是我的 sprite sheet 动画代码:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile: @"coinsprite.plist"];

//load the sprite sheet into a CCSpriteBatchNode object. If you're adding a new sprite

//to your scene, and the image exists in this sprite sheet you should add the sprite

//as a child of the same CCSpriteBatchNode object otherwise you could get an error.

CCSpriteBatchNode *parrotSheet12 = [CCSpriteBatchNode batchNodeWithFile"coinsprite.png"];



//add the CCSpriteBatchNode to your scene

[self addChild:parrotSheet12];


//load each frame included in the sprite sheet into an array for use with the CCAnimation object below

NSMutableArray *flyAnimFrames12 = [NSMutableArray array];

for(int i = 1; i <=30; ++i) {

    [flyAnimFrames12 addObject:

     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:

      [NSString stringWithFormat"coins%04d.png", i]]];

}

//Create the animation from the frame flyAnimFrames array

CCAnimation *flyAnim12 = [CCAnimation animationWithFrames:flyAnimFrames12 delay:1.0f];

//create a sprite and set it to be the first image in the sprite sheet

CCSprite * dragont2 = [CCSprite spriteWithSpriteFrameName"coins0000.png"];

//set its position to be dead center, i.e. screen width and height divided by 2

[dragont2 setPosition:ccp(600,600)];

//[self moveRandom:theParrot];
//create a looping action using the animation created above. This just continuosly

//loops through each frame in the CCAnimation object

CCAction *flyAction12 = [CCRepeatForever actionWithAction:

                         [CCAnimate actionWithAnimation:flyAnim12 restoreOriginalFrame:NO]];

//start the action

[dragont2 runAction:flyAction12];

//add the sprite to the CCSpriteBatchNode object

[parrotSheet12 addChild:dragont2];



Best Answer-推荐答案


问题解决了

-(void) coinanimationeffectCGPoint) ptPos {
m_gamecoinffect = [CCSprite spriteWithSpriteFrameName"coins0001.png"];
[self addChild:m_gamecoinffect];



CCAnimate *coineffect = [CCAnimate actionWithSpriteSequence"coins%04d.png" numFrames:30 delay:0.01f restoreOriginalFrame:NO];
[m_gamecoinffect runAction:[CCRepeatForever actionWithAction:coineffect]];

m_gamecoinffect.position = ptPos;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    m_gamecoinffect.scale *= 2;

}

添加了这个功能

并在

中调用该函数
-(void) checkHeroAndCoins {
float fDelta = 0;
if(m_hero->m_bMagnet)
    fDelta = iDevPixelX(30);

for(Coin *coin in m_drawLayer.children){
    if([coin isKindOfClass:[Coin class]]){
        CGRect rCoin = CGRectMake(coin.position.x - coin.contentSize.width * coin.scaleX / 2.0f - fDelta,
                                  coin.position.y - coin.contentSize.height * coin.scaleY / 2.0f - fDelta,
                                  coin.contentSize.width * coin.scaleX + fDelta * 2, coin.contentSize.height * coin.scaleY + fDelta * 2);
        CGRect rHero = CGRectMake(m_hero.position.x - m_hero.contentSize.width * m_hero.scaleX / 2.0f, m_hero.position.y, m_hero.contentSize.width * m_hero.scaleX, m_hero.contentSize.height * m_hero.scaleY);
        if(CGRectIntersectsRect(rCoin, rHero)){
            coin.tag = DELETED_TAG;
            g_nCoin++;
            [[AppDelegate getDelegate] playSystemEffect:E_COIN];



         [self coinanimationeffect:ccp(coin.position.x, coin.position.y)];






        }
    }
}
[[AppDelegate getDelegate] saveSetting];

}

关于ios - cocos2d 动画不显示 Sprite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40927068/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap