Удаление ccLabelBMFONT и размещение нового на том же месте из другого класса - PullRequest
1 голос
/ 24 марта 2012

Мне снова нужна ваша помощь, я благодарю вас, как и каждый раз, когда вы мне помогли.

Я занимаюсь разработкой игры для iPhone с использованием фреймворка 'COCOS2D' и 'OBJECTIVE-C'.В моей игре есть десять (10) уровней.Метка LEVEL создается и определяется в классе (i: e HudLayer.h, HudLayer.m), и я удаляю LABEL в другом классе (i: e GameScene.m). В игре я использую ccLabelBMFont для создания метки LEVEL..

Теперь проблема в том, что когда я удаляю метку LEVEL (т.е. уровень 1) и размещаю новую метку уровня (то есть уровень 2), код не удаляет «уровень 1» и поместив "Уровень 2" на предыдущую метку УРОВНЯ (i: e Уровень 1).

Ниже приведен мой Код для той же проблемы, пожалуйста, скажите, куда я иду Неправильно:

**Code of HudLayer.h**

#import "Foundation/Foundation.h"
#import "cocos2d.h"
#import "GameScene.h"

@interface HudLayer : CCLayer { 
    CCLabelBMFont * level;
}

@property (nonatomic,retain) CCLabelBMFont * level;
@end

Теперь код для «HudLayer.m», где я синтезирую и использую «уровень»:

#import "HudLayer.h" 
      #import "GameScene.h"

    @implementation HudLayer 

    @synthesize level;
       level = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 1",level] fontName:@"Marker Felt" fontSize:12];
       [level setAnchorPoint:ccp(1,0.5)];
       [level setPosition:ccp(250,470)]; 
       [level setColor:ccORANGE]; 
       [self addChild:level];
     }
     return self;
     }
     - (void) dealloc {
       [super dealloc];
       [lives release];
     } 

    @end

*HERE IS MY CODE FOR "GameScene.h"*

#import "cocos2d.h"
#import "HudLayer.h"
typedef enum {
    Level1, 
    Level2,
    Level3,
    Level4,
    Level5, 
    Level6,
    Level7, 
    Level8,
    Level9, 
    Level10,
} LevelType;

@interface GameLayer : CCLayer
{
int level;
BOOL ifLevel2Started;
    BOOL ifLevel3Started;
    BOOL ifLevel4Started;
    BOOL ifLevel5Started;
    BOOL ifLevel6Started;
    BOOL ifLevel7Started;
    BOOL ifLevel8Started;
    BOOL ifLevel9Started;
    BOOL ifLevel10Started;
}
@property (assign,readwrite) int level;
@end

И, наконец, я хочуУДАЛИТЬ УРОВЕНЬ ярлык 1 Из класса HudLayer и нарисуйте новый ярлык с именем «Уровень 2» на основе баллов:

        #import "GameScene.h"
        #import "HudLayer.h"
        @implementation GameLayer
        @synthesize level;

        @synthesize levelType = _levelType;
        if (self.levelType ==  Level1) {
                [self LevelFeatures];
                ifLevel2Started = FALSE;
            }

            if (self.levelType ==  Level2) {
                [self LevelFeatures1];
                ifLevel3Started = FALSE;
            }

            if (self.levelType ==  Level3) {
                [self LevelFeatures2];
                ifLevel4Started = FALSE;
            }

    -(void)LevelFeatures
    {
        HudLayer * hl = (HudLayer *)[self getChildByTag:KHudLayer]; // * HERE I AM DOING MY MAIN STEP, HERE AM CREATING OBJECT OF **"HudLayer" class** *

        hl.level = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 2"]  fontName:@"Marker Felt" fontSize:12];
//**HERE AM SETTING NEW Label FOR LEVEL.**
}

Я НАЗЫВАЮ ЗАДАЧУ ТОЛЬКО НА ВЫШЕ ЛИНИИКОДЕКСА, КОТОРЫЙ Я НАПИСАЛ ТАК БОЛЬШОЙ ЗАПРОС, ЧТОБЫ ВЫ ТОЧНО ПОНИМАЛИ МОЮ ПРОБЛЕМУ.

ЧТО Я ДОЛЖЕН ЗАПИСАТЬITE / CODE НАД ЗДЕСЬ ТАК, ЧТО ПРЕДЫДУЩАЯ ЭТИКЕТКА ПОЛНОСТЬЮ УДАЛЯЕТСЯ, И НОВЫЙ ЕДИНСТВЕННЫЙ МЕСТО.(т.е. перегрузка метки не происходит).


Ответы [ 2 ]

1 голос
/ 26 марта 2012

когда вы синхронизируете метку, сделайте это:

 levelLbl = [CCLabelTTF labelWithString:@"" fontName:@"Marker Felt" fontSize:12];

и когда вы устанавливаете метку в LevelFeatures, просто используйте "setString:" примерно так:

[hl.levelLbl setString:[NSString stringWithFormat:@"Level %i",level]];
1 голос
/ 25 марта 2012

хммм, в начале фрагмента реализации отсутствует фрагмент кода, но я рискну (с минимальными изменениями в текущей настройке):

 -(void)LevelFeatures {
     HudLayer * hl = (HudLayer *)[self getChildByTag:KHudLayer];
     [hl removeChild:h1.level cleanup:YES];
     hl.level=[CCLabelTTF labelWithString:[NSString stringWithFormat:@"Level 2"] 
                                 fontName:@"Marker Felt" 
                                 fontSize:12];
     [hl addChild:hl.level];
}

Я не уверен, почему высохраняют уровень в HudLayer, но простое добавление в качестве дочернего к любому потомку CCNode сохранит его для вас.Кроме того, с этим видом кода я склонен использовать теги для восстановления доступа к детям, которые я добавляю к потомку CCNode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...