Estoy desarrollando un juego de iPhone 2D utilizando Cocos2D. Necesito un temporizador de cuenta atrás. ¿Cómo puedo crear un temporizador de cuenta regresiva en cocos2d?¿Cómo puedo crear un temporizador de cuenta regresiva para cocos2d?
Respuesta
insuficiente representante a Upvote Tom, pero tiene toda la razón. Dentro del contexto de esta pregunta, NSTimer es la solución INCORRECTA. El marco Cocos2d proporciona un programador que se integra con otras funciones del juego como Pausa/Reanudar (y lo más probable es que use NSTimer bajo el capó).
Ejemplo desde el enlace anterior:
-(id) init
{
if(! [super init])
return nil;
// schedule timer
[self schedule: @selector(tick:)];
[self schedule: @selector(tick2:) interval:0.5];
return self;
}
-(void) tick: (CCTime) dt
{
// bla bla bla
}
-(void) tick2: (CCTime) dt
{
// bla bla bla
}
Mira NSTimer, es muy probable que pueda proporcionar cualquier funcionalidad de temporizador necesaria.
-(id) init
{
if(! [super init])
return nil;
// schedule timer
[self schedule: @selector(tick:)];
[self schedule: @selector(tick2:) interval:0.5];
return self;
}
-(void) tick: (ccTime) dt
{
//some function here
}
-(void) tick2: (ccTime) dt
{
//some function here
}
Gracias por tu respuesta. funciona ... – Nasir
Esta es la forma incorrecta de hacer esto usando cocos2d, necesita hacer lo que otros han dicho y usar el material [self schedule:]. Las principales razones son que usar NSTimer no admitirá pacos2d pause, start, stop commands whild schedule will. – Solmead
Debe decirse otra vez: ¡NO USE NSTimer! Esto está mal. – Sneakyness
http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:best_practices
- Trate NO utilizar NSTimer de cacao. En su lugar, use el propio programador de cocos2d.
- Si utiliza planificador cocos2d, se tendrá:
- pausa automática/hoja de vida.
- cuando la capa (escena, Sprite, CocosNode) entra en el escenario, el temporizador se activará automáticamente, y cuando abandone el escenario, se desactivará automáticamente.
- Su objetivo/selector se llamará con un tiempo de Delta ...
En cocos 2d hay sección de actualización predeterminado de temporizador.
Prueba esto:
[self schedule:@selector(update:)];
- (void)update:(ccTime)dt {
}
Para aquellos que quieren utilizar NSTimer en lugar del método "programa", se puede crear una clase como la siguiente:
ZIMCountdownTicker.h
#import <Foundation/Foundation.h>
extern NSString * const ZIMCountdownTickerTickAction;
extern NSString * const ZIMCountdownTickerResetAction;
@protocol ZIMCountdownTickerProtocol;
/*!
@class ZIMCountdownTicker
@discussion This class creates a countdown ticker.
@updated 2011-03-05
*/
@interface ZIMCountdownTicker : NSObject {
@private
NSTimer *_timer;
id<ZIMCountdownTickerProtocol> _delegate;
NSTimeInterval _interval;
double _period;
double _value;
}
/*!
@method initWithDelegate:withTimeInterval:forTimePeriod:
@discussion This method instantiate an instance of this class with the specified parameters.
@param delegate A reference to a class that has implemented ZIMCountdownTickerProtocol.
@param interval The time interval in seconds to be used when running the countdown ticker.
@param period The time period in seconds for which countdown ticker will run.
@updated 2011-03-05
*/
- (id) initWithDelegate: (id<ZIMCountdownTickerProtocol>)delegate withTimeInterval: (NSTimeInterval)interval forTimePeriod: (double)period;
/*!
@method start
@discussion This method will start the countdown ticker.
@updated 2011-03-05
*/
- (void) start;
/*!
@method stop
@discussion This method will stop the countdown ticker.
@updated 2011-03-05
*/
- (void) stop;
/*!
@method reset
@discussion This method will reset the countdown ticker.
@updated 2011-03-06
*/
- (void) reset;
/*!
@method value
@discussion This method will return the countdown ticker's current value; however, using this method will cause
the ticker to stop.
@return The countdown ticker's current value.
@updated 2011-03-05
*/
- (double) value;
@end
@protocol ZIMCountdownTickerProtocol <NSObject>
@optional
/*!
@method countdownTicker:didUpdateValue:withAction:
@discussion This method will notify the delegate with the current value.
@param ticker A reference to tiggering ticker.
@param value The current value.
@param action The action that tiggered this method.
@updated 2011-03-05
*/
- (void) countdownTicker: (ZIMCountdownTicker *)ticker didUpdateValue: (double)value withAction: (NSString *)action;
/*!
@method countdownTickerDidFinish:
@discussion This method will notify the delegate that the countdown ticker finished.
@param ticker A reference to tiggering ticker.
@updated 2011-03-05
*/
- (void) countdownTickerDidFinish: (ZIMCountdownTicker *)ticker;
@end
ZIMCountdownTicker.m
// Ziminji Classes
#import "ZIMCountdownTicker.h"
NSString * const ZIMCountdownTickerTickAction = @"ticker.tick";
NSString * const ZIMCountdownTickerResetAction = @"ticker.reset";
/*!
@category ZIMCountdownTicker (Private)
@discussion This category defines the prototypes for this class's private methods.
@updated 2011-03-05
*/
@interface ZIMCountdownTicker (Private)
/*!
@method countdown:
@discussion This method is called by the timer to decrement the counter's value and will send
the delegate the updated value.
@param timer The timer currently in use.
@updated 2011-03-06
*/
- (void) countdown: (NSTimer *)timer;
@end
@implementation ZIMCountdownTicker
- (id) initWithDelegate: (id<ZIMCountdownTickerProtocol>)delegate withTimeInterval (NSTimeInterval)interval forTimePeriod: (double)period {
if (self = [super init]) {
_delegate = delegate;
_interval = interval;
_period = period;
_value = period;
_timer = nil;
}
return self;
}
- (void) start {
if (_timer == nil) {
_timer = [NSTimer scheduledTimerWithTimeInterval: _interval target: self selector: @selector(countdown:) userInfo: nil repeats: YES];
}
}
- (void) stop {
if (_timer != nil) {
[_timer invalidate];
_timer = nil;
}
}
- (void) reset {
[self stop];
_value = _period;
if ((_delegate != nil) && [_delegate respondsToSelector: @selector(countdownTicker:didUpdateValue:withAction:)]) {
[_delegate countdownTicker: self didUpdateValue: _value withAction: ZIMCountdownTickerResetAction];
}
}
- (double) value {
[self stop];
return _value;
}
- (void) countdown: (NSTimer *)timer {
_value -= 1;
if ((_delegate != nil) && [_delegate respondsToSelector: @selector(countdownTicker:didUpdateValue:withAction:)]) {
[_delegate countdownTicker: self didUpdateValue: _value withAction: ZIMCountdownTickerTickAction];
}
if (_value <= 0) {
[self stop];
if ((_delegate != nil) && [_delegate respondsToSelector: @selector(countdownTickerDidFinish:)]) {
[_delegate countdownTickerDidFinish: self];
}
}
}
- (void) dealloc {
if (_delegate != nil) {
[_delegate release];
}
if (_timer != nil) {
[_timer invalidate];
}
[super dealloc];
}
@end
- 1. temporizador de cuenta regresiva
- 2. C temporizador # cuenta regresiva
- 3. Momentjs y temporizador de cuenta regresiva
- 4. Implementando un temporizador de cuenta regresiva en Objective-c?
- 5. Hacer un temporizador de cuenta regresiva con Python y Tkinter?
- 6. cocos2d: Cómo configurar un temporizador
- 7. Crear una cuenta regresiva simple en el procesamiento
- 8. ¿Cómo se implementa un temporizador de cuenta regresiva de desplazamiento horizontal?
- 9. mostrar un temporizador de cuenta regresiva en el cuadro de diálogo de alerta
- 10. ¿Cómo usar un textView para contar la cuenta regresiva a cero?
- 11. Actualizando Android TextView regularmente para mostrar la cuenta regresiva
- 12. segundos temporizador de cuenta atrás
- 13. Cómo mostrar la cuenta regresiva usando PHP y MySQL
- 14. ¿Cómo puedo crear una cuenta XMPP?
- 15. Crear un temporizador de iOS
- 16. ¿Cómo puedo permitir que mi CountDownTimer se restablezca después de que la cuenta regresiva haya finalizado?
- 17. Cómo crear un temporizador usando tkinter?
- 18. Cómo crear un temporizador en WinApi (C++)?
- 19. Crear un temporizador usando Lua
- 20. selector de hora/minuto para el temporizador de cuenta atrás de Android
- 21. ¿Cómo puedo usar CreateTimerQueueTimer para crear un temporizador de alta resolución en C#?
- 22. ¿Cómo crear una cuenta SSH restringida para un repositorio GIT?
- 23. ¿Cómo creo un evento de temporizador preciso en Objective-C/iOS?
- 24. ¿Cómo publicar una cuenta regresiva a través del estado de Gmail?
- 25. crear cuenta de usuario local
- 26. Javascript, temporizador de cuenta atrás y texto de pantalla
- 27. ¿Cómo puedo crear un multihilo en C para Windows?
- 28. ¿Cómo puedo disponer de forma segura un Temporizador System.Timers?
- 29. ¿Cómo puedo crear un temporizador de Cuenta atrás de 5 segundos con jquery que finaliza con una ventana emergente de inicio de sesión?
- 30. crear cuenta personalizada android
y uso similar [self unschedule: @selector (tick2 :)] dentro de tick2: cuando quieras que deje de repetirse. – adam
[self schedule: @selector (tick :)]; cuando intento hacerlo en mi código ... mi aplicación no puede encontrar el programa ... ¿es función de qué clase ...? –
@mihir CCLayer Creo, generalmente como una superclase –