1

cocos2d でカウントダウン タイマーを作成しようとしていますが、どうしようもなく、この問題を解決したいと考えています。私のコードはこれより下にあります。おそらくロジックが間違っているのですが、修正できません。

-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super" return value
if( (self=[super init] )) {


    CCSprite *background = [CCSprite spriteWithFile:@"backgame.png"];
    CGSize size = [[CCDirector sharedDirector] winSize];
    [background setPosition:ccp(size.width/2, size.height/2)];

    [self addChild: background];


    [self schedule:@selector(countDown:)];              
}
return self;
}

-(void)countDown:(ccTime)delta
{

CCLabel *text = [CCLabel labelWithString:@" " 
                                         fontName:@"BallsoOnTheRampage" fontSize:46];

text.position = ccp(160,455);
text.color = ccYELLOW;
[self addChild:text];

int countTime = 20;
while (countTime != 0) {
    countTime -= 1;
    [text setString:[NSString stringWithFormat:@"%i", countTime]];
} 

} 
4

2 に答える 2

4

あなたint countTime = 20;は毎回20であると宣言しています。また、whileループは、システムがCCLabelを更新できるのと同じ速さでcountTimerを減らします。リアル タイマーを実行しようとしている場合は、countDown:が呼び出されたときにのみデクリメントする必要があります。while ループ中ではありません。

これを試して:

@interface MyScene : CCLayer
{
   CCLabel *_text;

}

@property (nonatomic, retain) int countTime;

@end

@implementation MyScene

@synthesize countTime = _countTime;

-(id) init {
    if( (self=[super init] )) {


    CCSprite *background = [CCSprite spriteWithFile:@"backgame.png"];
    CGSize size = [[CCDirector sharedDirector] winSize];
    [background setPosition:ccp(size.width/2, size.height/2)];

    [self addChild: background];
    _countTime = 20;

    _text = [CCLabel labelWithString:[NSString stringWithFormat:@"%i", self.countTime] 
                                         fontName:@"BallsoOnTheRampage" fontSize:46];

    text.position = ccp(160,455);
    text.color = ccYELLOW;
    [self addChild:_text];

    [self schedule:@selector(countDown:) interval:0.5f];// 0.5second intervals



    }
return self;
}

-(void)countDown:(ccTime)delta {

   self.countTime--;
  [_text setString:[NSString stringWithFormat:@"%i", self.countTime]];
  if (self.countTime <= 0) {

    [self unschedule:@selector(countDown:)];
  }
}

@end 
于 2011-03-07T18:19:05.897 に答える
-1

countDown では、カウントは常に 20 になります。

これも init に移動する必要があります。

CCLabel *text = [CCLabel labelWithString:@" " 
                                     fontName:@"BallsoOnTheRampage" fontSize:46];

text.position = ccp(160,455); text.color = ccYELLOW; [self addChild:テキスト];

次に、次を使用する必要があります。

[self schedule:@selector(countDown:) interval:1.0f];

次に、CCLabel を使用する代わりに、CCLabelBMFont を使用する必要があります。それははるかに高速です:)

于 2011-03-07T18:22:15.587 に答える