0

画像のアニメーションを表示するこのコードがあります

-(void) blink:(ccTime) delta {


    animateblink ++; //adds 1 every frame

    if (animateblink <= 6 ) {  //if we included frames to show for breaking and the current frame is less than the max number of frames to play

        if (animateblink < 6) {


      [sprite setTexture:[[CCSprite spriteWithFile:[NSString stringWithFormat:@"%@_blinkk00%i.png", baseImageName,animateblink]] texture]];

    [self unschedule:_cmd];
    [self schedule:@selector(openEyes:) interval:0.1f];

            [self schedule:@selector(moveSprite:) interval:0.1f];
}
    }
}

私はアニメーションのような6枚の画像を持っています

dragonimage_blinkk001,dragonimage_blinkk002,dragonimage_blinkk003,dragonimage_blinkk004,dragonimage_blinkk005,dragonimage_blinkk006 like that

私は2つの方法を入れました.1:アニメーション時間用 2:画像の動き用

コードは

-(void) openEyes:(ccTime) delta {

    [sprite setTexture:[[CCSprite spriteWithFile:[NSString stringWithFormat:@"%@.png", baseImageName]] texture]];


    [self unschedule:_cmd];

    int blinkInterval = (arc4random() % 6) + 1; // range 3 to 8
    [self schedule:@selector(blink:) interval:blinkInterval];
}


-(void)moveSprite:(ccTime)delta

{
    movementCounter ++;
    if (movementCounter == 1000) {
        [self unschedule:_cmd];
    }
    else
    {
        spriteimagename.position = ccp(spriteimagename.position.x+10,spriteimagename.position.y);
    }
}

しかし、最初の方法では、アニメーションの時間が正しくなく、アニメーションの遅延が多く、画像のアニメーションをランダムかつ高速に表示したいだけで、ドラゴンが飛んでいるアニメーションです。

私の方法はまったく機能していません。その画像の動きはありませんでした。

私の問題を理解していただければ幸いです。上記の2つの方法の問題を解決する方法。前もって感謝します。

4

1 に答える 1

0

簡単な解決策は、cocos2d CCSpriteFrame クラスに frameIndex メンバーを追加することです。変更が許可されているかどうかはわかりません。しかし、それはうまくいきます。

@interface CCSpriteFrame : NSObject <NSCopying>
{
        int          frameIndex;
        ....
}

//ここのコードでは、一意のインデックスでフレームを初期化します

CCAnimation* animation;

    NSMutableArray *animFrames2 = [NSMutableArray array];
    for( int i=1;i<=15;i++)
    {
        CCSpriteFrame *frame = [cache spriteFrameByName:[NSString stringWithFormat:@"ActerSmash_%d.png",i]];
        frame.frameIndex = (int)i;
        [animFrames2 addObject:frame];
    }
    animation = [CCAnimation animationWithFrames:animFrames2];

    CCAnimate *action = [CCAnimate actionWithDuration:ACTER_SMASH_SPEED animation:animation restoreOriginalFrame:YES];
    action.tag = kTagAnimationSmashAnim ;
    mActer.AnimSmash = action;

// フレーム インデックスをチェック中

  CCAnimate *anim = mActer.AnimSmash ;

    for(CCSpriteFrame *frame in anim.animation.frames)
    {
      if([mActer isFrameDisplayed:frame] )  )
            {
                if(frame.frameIndex == 5 )
                {
                    //Do something..
                }
            }
    }
于 2012-07-16T07:33:02.037 に答える