Внедрение системы оценки жизни в cocos2d - PullRequest
1 голос
/ 06 августа 2011

Я пытаюсь реализовать систему live / Score, используя cocos2d и box2d. мои тела - это box2d тела, которые сталкиваются так, как я хочу, но проблема в том, что я пытался реализовать систему оценок, в которой при каждом столкновении жизнь удаляется или уменьшается по сравнению с оставшимися жизнями и после определенного числа столкновений (скажем, 3 ) игра должна остановиться. В этом случае это не так, но из CCLOG я узнаю, что на самом деле он печатает сообщение, которое я помещаю для отображения при вызове игрового менеджера, но странно то, что он вызывает его навсегда (см. Также окно отладки ниже) при запуске приложения он полностью удаляет объект «человек» со сцены.

У меня есть класс gameManager (singleton), в котором в файле .h я объявил

@interface GameManager : NSObject {
    int lives;
}
-(void)removeLives : (int)val;

и в файле gameManager.m у меня есть этот метод

-(void)removeLives : (int)val
{
    lives -=val;
    CCLOG(@"YOU HAVE LOST A LIFE MAN");
}

В моем основном файле gameLayer.mm в методе обновления у меня есть этот код

if(kStateColliding){

    if (lives > 0) {
    man.visible = TRUE;

    } else if (lives <= 0) {

        [man stopAllActions];
        man.visible = FALSE;    
        [[GameManager sharedGameManager] removeLives:1];
    }
}

и жизнь инициализируется в методе init gameManager, таким образом

-(id)init {                                                        // 8
    self = [super init];
    if (self != nil) {
    // Game Manager initialized
    CCLOG(@"Game Manager Singleton, init");
    lives = 3;
}

Это снимок экрана консоли отладки

debug console screen shot

Также обратите внимание, что у меня есть класс "Man", который является классом Box2d.

Я правильно делаю? Пожалуйста, кто-нибудь может мне помочь с тем, как идти о внедрении этой системы и где и как сделать соответствующие звонки.

1 Ответ

1 голос
/ 07 августа 2011

Ваш вызов [[GameManager sharedGameManager] removeLives: 1] находится в блоке else if (life <= 0).Его следует вызывать только при жизнях> 0.

Вы захотите сделать что-то после того, как у человека не осталось жизней, чтобы предотвратить вызов блока if (kStateColliding).Кроме того, вы, вероятно, захотите сбросить положение человека в стороне от объекта, с которым он сталкивается, чтобы предотвратить одно «столкновение», инициирующее множественные вызовы removeLives.

Где вы объявляете жизни в gameLayer.mm?Убедитесь, что для него задано значение, хранящееся в синглтоне, потому что с вашим текущим кодом я не вижу, как он мог бы установить 0 или ниже, если только он не инициализируется равным 0 или вы не меняете его значение в другом месте.

Я хотел бы задать вопросы cocos2d, как это на форумах cocos2d: http://www.cocos2d -iphone.org / forum /

Там вы получите ответы быстрее, часто в течение нескольких минут.

...