Добавление визуальной стороны к расписанию в Cocos2d - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь создать таймер для моей игры, который будет отсчитывать от числа, назовем его 100. Я придерживаюсь лучших практик cocos2d, и поэтому я не использую NSTimer. Я хочу, чтобы каждую секунду я хотел, чтобы номера этого таймера менялись. Я мог бы, вероятно, найти способ сделать это, используя таблицу спрайтов со всеми числами от 100 до 0, но я знаю, что есть способ сделать это, используя только цифры от 0 до 9 и их изображения.

Это код, который я использую, с соответствующим - (void)

    [self schedule: @selector(tick:)];
    [self schedule: @selector(tick2:) interval:1];

В общем, я хотел бы знать, как сделать так, чтобы он отсчитывал от 100, а также узнать, как заставить эти тики уменьшать значение на 1 каждую секунду.

1 Ответ

2 голосов
/ 16 февраля 2012

Инициализируйте целочисленную переменную, в которой будет сохранено значение обратного отсчета:

int count = 100;

Вы хотите сохранить метку (CCLabelBMFont и т. Д.) Для отображения этого значения счетчика. Я рекомендую Glyph Designer (или Hierro, если вы хотите что-то бесплатно) генерировать растровые изображения шрифтов, совместимые с 0 до 9 cocos2D, которые затем можно использовать в вашем CCLabelBMFont:

CCLabelBMFont* countLabel = [CCLabelBMFont labelWithString:@"0" fntFile:@"myFont.fnt"]; 

Далее, запланируйте одну функцию тиков, которая будет срабатывать каждую секунду:

[self schedule: @selector(tick:) interval:1];

Эта тиковая функция уменьшает счет на 1 при каждом вызове. Кроме того, добавьте условие, что, если count достигнет 0, он сам не будет распланирован:

-void tick:(ccTime) dt
{
    count --; // decrement count by 1 each time this function is called
    if (count == 0)
        [self unschedule: @selector(tick:)];      
}

И, наконец, в вашем основном цикле обновления (или даже в самой функции тиков после того, как вы уменьшили счетчик), вы можете обновлять и перерисовывать эту метку с самым последним значением каждый раз:

[countLabel setString:[NSString stringWithFormat:@"%i", count]];

Всего наилучшего.

...