1

プロジェクトで次のコード行を使用したいと考えています。

   // Create the intro image
    CGSize screenSize = [CCDirector sharedDirector].winSize;
    CCSprite *introImage = [CCSprite spriteWithFile:@"intro1.png"];
    [introImage setPosition:ccp(screenSize.width/2, screenSize.height/2)];
    [self addChild:introImage];

    // Create the intro animation, and load it from intro1 to intro7.png
    CCAnimation *introAnimation = [CCAnimation animation];
    [introAnimation setDelay:2.5f];
    for (int frameNumber=0; frameNumber < 8; frameNumber++) {
        CCLOG(@"Adding image intro%d.png to the introAnimation.",frameNumber);
        [introAnimation addFrameWithFilename:
         [NSString stringWithFormat:@"intro%d.png",frameNumber]];

警告が表示されます:

instance method '-setDelay:' not found (return type defaults to 'id')

ラインを指す

[introAnimation setDelay:2.5f];

行を指す同様の警告

[introAnimation addFrameWithFilename: [NSString stringWithFormat:@"intro%d.png",frameNumber]];

setDelay と addFrameWithFilename は廃止されましたか? はいの場合、代わりに何を使用すればよいですか。助けてください。

4

1 に答える 1

1

うーん...これらの方法がまったく存在するかどうかはわかりません。これは私のコード ベース (cocos2 バージョン 2.0) の例です。

+ (CCAnimation *) getAnimationForSoldier:(Soldier *)theSoldier animationType:(mapAnimationTypeE)animationType {

    id animation = nil;
    NSString *animationName = [SpriteUtils getAnimationNameForSoldier:theSoldier animationType:animationType];
    if (!animationName) return nil;
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"%@.plist", animationName]];

    if ((animation = [[CCAnimationCache sharedAnimationCache] animationByName:animationName])) {
        return animation;
    } else {
        NSUInteger numberOfFrames = 8;
        if (animationType == mapAnimationTypeCast || animationType == mapAnimationTypeSkill) numberOfFrames = 20;
        NSMutableArray *frames = [NSMutableArray arrayWithCapacity:numberOfFrames];
        for (NSUInteger i = 1 ; i <= numberOfFrames ; i++) {
            NSString *frName = [SpriteUtils getFrameNameForAnimationNamed:animationName andFrame:i];
            CCSpriteFrame *frr = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:frName];
            if (frr) { 
               [frames addObject:frr];
            } else {
                MPLOGERROR(@"*** No frame named [%@], bailing out.", frName);
                return nil;
            }
            [frames addObject:frr];
        }

        animation = [CCAnimation animationWithSpriteFrames:frames delay:.06];
        [[CCAnimationCache sharedAnimationCache] addAnimation:animation name:animationName];

    }

    return animation;

}

注:最初にスプライトフレーム配列を作成し、次に配列と目的の遅延でアニメーションを作成します。

遅延は、各フレーム間の遅延です (合計時間ではありません)。

cocos2d バージョン 2.N を使用している場合、遅延のセッターは

animation.delayPerUnit = 0.6f;
于 2013-03-13T18:31:19.140 に答える