2011-04-10 4 views

Respuesta

8

Aquí, esto podría funcionar

En el archivo .h:

@interface HelloWorld : CCLayer { 
    int score;  
    CCLabelTTF *scoreLabel; 
} 

- (void)addPoint; 

En el archivo .m:

En el método init:

//Set the score to zero. 
score = 0; 

//Create and add the score label as a child. 
scoreLabel = [CCLabelTTF labelWithString:@"8" fontName:@"Marker Felt" fontSize:24]; 
scoreLabel.position = ccp(240, 160); //Middle of the screen... 
[self addChild:scoreLabel z:1]; 

En otro lugar:

- (void)addPoint 
{ 
    score = score + 1; //I think: score++; will also work. 
    [scoreLabel setString:[NSString stringWithFormat:@"%@", score]]; 
} 

Ahora acaba de llamar: [auto addPoint]; cada vez que el usuario mata a un enemigo.

Eso debería funcionar, dime si no lo hizo porque no lo he probado.

+0

¡gracias de nuevo, he notado que apareces en algunas de mis preguntas! y gracias por tu ayuda. ahora mira mi pregunta más reciente sobre una IA. Realmente podría usar algo de ayuda allí. – ipodfreak0313

+0

@ ipodfreak0313: Haha. ¡Me alegro de poder ayudar! =) Eché un vistazo a tu pregunta de IA, pero desafortunadamente nunca he intentado hacer mi propia IA antes. Aunque podría tener algunas ideas. Lo pensaré y te dejaré saber si se me ocurre algo. – tallen11

+0

gracias, me gustaría poder responder algunas preguntas, pero todavía soy muy nuevo en cocos2d (está bien, tal vez no sea nuevo, pero tengo mucho que aprender). – ipodfreak0313

0

Usando UILabel

UILabel.text = [NSString stringWithFormat:@"%lu",score]; 

Mueva el UILabel en la parte superior de la vista utilizando la interfaz constructor también se puede crear mediante programación

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,500,30)]; 
[[self view] addSubview:label]; 
[label release]; // dont leak :) 
+1

@ ipodfreak0313: No hay necesidad de CAPS, UILabel también funciona bien para Cocos2D, quiero decir, también puedes representar el contenido en una UIView y puedes agregar otras cosas en la jerarquía de vistas. Además: el procesamiento de texto UIKits es mucho mejor que Cocos2Ds. – JustSid

+0

@JustSid: estoy bastante seguro de que se recomienda no representar los elementos de UIKit en la parte superior de una escena de cocos2d, pero podría estar equivocado. – tallen11

+0

@allthewayapps: Hay algunos consejos/pautas generales sobre cómo manejar UIViews sobre una vista EAGLLayer, pero Apple hizo su propio techdemo sobre cómo renderizar rápidamente y cómo renderizar la interfaz de usuario en un juego 3D OpenGL ES y también usaron UIKit (mira los videos de la WWDC 2010 para más información). – JustSid

3

en el archivo de cabecera:

@interface GameLayer : CCLayer 
{ 
    CCLabelTTF *_scoreLabel; 
} 

-(void) updateScore:(int) newScore; 

en archivo de implementación:

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

     // add score label 
     _scoreLabel = [CCLabelTTF labelWithString:@"0" dimensions:CGSizeMake(200,30) alignment:UITextAlignmentRight fontName:@"Marker Felt" fontSize:30]; 
     [self addChild:_scoreLabel]; 
     _scoreLabel.position = ccp(screenSize.width-100, screenSize.height-20); 

    } 
    return self; 
} 

-(void) updateScore:(int) newScore { 
    [_scoreLabel setString: [NSString stringWithFormat:@"%d", newScore]]; 
} 

EDIT: si no desea utilizar una Ivar, puede utilizar las etiquetas:

[self addChild:scoreLabel z:0 tag:kScoreLabel]; 
// ... 
CCLabelTTF *scoreLabel = (CCLabelTTF*)[self getChildByTag:kScoreLabel]; 

EDIT 2: Por motivos de rendimiento que deben cambiar a CCLabelAtlas o si CCBitmapFontAtlas actualizar el puntaje con mucha frecuencia.

Lea también cocos2d programming guide about labels.

+0

¿Tengo que programar una actualización que llame a la función updateScore: (int) newScore? – ipodfreak0313

+0

por cierto me encanta tu foto de perfil de Mighty Eagle;) – ipodfreak0313

+0

no solo llames al método, cuando el puntaje cambia – Felix

Cuestiones relacionadas