0

ゲーム画面で 30 秒から 0 秒までのリバース タイマーを実装する必要がある 2D ゲームを開発しています。プレイヤーがキャラクターを動かさなければ勝ちます。

これは私の初期化方法です:

-(id)init
    {
    if(self==[super init])
    {
        self.isTouchEnabled=YES;
        self.isAccelerometerEnabled=YES;
        CGSize size=[[CCDirector sharedDirector] winSize];
        screenwidth=size.width;
        screenheight=size.height;
        west_pic=[CCSprite spriteWithFile:@"west_pic.png"];
        west_pic.anchorPoint=ccp(1, 1);
        west_pic.scaleX=1.4;
        west_pic.position=ccp(size.width, size.height);
        [self addChild:west_pic];
        label1=[CCLabelTTF labelWithString:@"Level One" fontName:@"Arial" fontSize:20];
        label1.position=ccp(size.width/3.8,size.height/1.2);
        [self addChild:label1];
        label2=[CCLabelTTF labelWithString:@"Lives :" fontName:@"ArcadeClassic" fontSize:18];
        label2.position=ccp(size.width/1.5,size.height/8.2);
        [self addChild:label2];
        player=[CCSprite spriteWithFile:@"player.png"];
        player.position=ccp(size.width/1.7, size.height/2);
        player.scale=0.2;
        player.tag=2;
        player.anchorPoint=ccp(1, 0);
        [self addChild:player];
        [self schedule:@selector(updateplayer:) interval:1.0f/60.0f];

    }
        return self;
    }
4

1 に答える 1

0

たとえば、プレーヤーがキャラクターを動かしてはならない秒数を持つインスタンスを持つことができます。次に、キャラクターがいつ動き始めていつ動きを止めたかを知るためのいくつかのイベントメソッドが必要です。プレーヤーまでの時間) とタイマーをスケジュールします。これにより、秒数が減少します。このように

- (void) onEnter
{
    [super onEnter];

    // if player character not move on start
    [self schedule:@selector(reduceRestTime) interval:1.f];
}

- (void) onExit
{
    [self unscheduleAllSelectors];
    [super onExit];
}

- (void) onCharacterStop
{
    m_restTime = // your time left. in your case, 30 sec
    // if you have time label
    [self updateRestTimeLabel];

    [self schedule:@selector(reduceRestTime) interval:1.f];
}

- (void) onCharacterBeginMovement
{
    [self unscheduleSelector:@selector(reduceRestTime)];    
}

- (void) reduceRestTime
{
    m_restTime--;

    // if you have time label
    [self updateRestTimeLabel];

    if( m_timeLeft == 0 )
    {
        [self unscheduleSelector:@selector(reduceRestTime)];

        // your win code
    }

}

- (void) updateRestTimeLabel
{
    [m_timeLabel setString:[NSString stringWithFormat:@"Time left: %d", m_timeLeft]];
}
于 2012-06-09T12:00:47.087 に答える