0

cocos 2dゲームでは、ヒーローのライフを更新するために3つのハートスプライトを使用します。ヒーローが1つのライフを失った場合は、1つのハートを非表示にする必要があります。

以下のコードを使用していますが、正しく機能していません。助けてください。

- (void)updateLives {
    int i = _lives;
    [self livess:(int)i];
}

- (void)livess:(int)ii { 

    CGSize winSize = [CCDirector sharedDirector].winSize;
    heart1=[CCSprite spriteWithFile:@"heart.png"];
    heart2=[CCSprite spriteWithFile:@"heart.png"];
    heart3=[CCSprite spriteWithFile:@"heart.png"];
    [heart1 setPosition:ccp(winSize.width/2*1.3, winSize.height * 0.9)];
    [self addChild:heart1 z:0];
    [heart2 setPosition:ccp(winSize.width/2*1.1, winSize.height * 0.9)];
    [self addChild:heart2 z:0];
    [heart3 setPosition:ccp(winSize.width/2*0.9, winSize.height * 0.9)];
    [self addChild:heart3 z:0];


    if (ii==3) {

        NSLog(@"%d",ii);
    }
    else if (ii==2)
    {
        NSLog(@"%d",ii);

        [heart3 setVisible:NO];

    } else if (ii==1)
    {

        NSLog(@"%d",ii);

        [heart3 setVisible:NO];
        [heart2 setVisible:NO];
    }
    else
    {

    }         
}

注:上記のコードでは、nslogは正しい値を出力しています。たとえば、1,2

4

1 に答える 1

1

コードから正しく非表示にする必要があります。ただし、この updateLives がゲーム ループ内で呼び出された場合、期待どおりに非表示にならない理由は、おそらく前のフレームのハートです。試す

1) heart1、heart2、heart3 を 1 回作成する

2) アップデートでは、スプライトを作成しないでください。つまり、コードの if... else 部分のみを保持します。

それが役に立てば幸い。

于 2012-07-18T20:05:26.690 に答える