Je développe un jeu iPhone 2D en utilisant cocos2d. J'ai besoin d'un compte à rebours. Comment puis-je créer un compte à rebours dans cocos2d?Comment puis-je créer un compte à rebours pour cocos2d?
Répondre
Pas assez de représentant Upvote Tom, mais il est tout à fait raison. Dans le contexte de cette question, NSTimer est la solution WRONG. Le framework Cocos2d fournit un planificateur qui s'intègre à d'autres fonctionnalités de jeu telles que Pause/Resume (et utilise probablement NSTimer sous le capot).
Exemple à partir du lien ci-dessus:
-(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
}
Regardez NSTimer, il peut très probablement fournir n'importe quelle fonctionnalité de temporisateur nécessaire.
-(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
}
Merci pour votre réponse. son fonctionnement .... – Nasir
C'est la mauvaise façon de le faire en utilisant cocos2d, vous devez faire ce que les autres ont dit et utiliser les trucs [self schedule:]. Les principales raisons sont que l'utilisation de NSTimer ne supporte pas les commandes de pause, de démarrage et d'arrêt de cocos2d. – Solmead
A redire: NE PAS UTILISER NSTimer! C'est faux. – Sneakyness
http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:best_practices
- Essayez PAS à utiliser NSTimer de cacao. Utilisez plutôt le propre planificateur de cocos2d.
- Si vous utilisez planificateur cocos2d, vous aurez:
- pause automatique/CV.
- Lorsque le calque (Scene, Sprite, CocosNode) entre dans la scène, la minuterie sera automatiquement activée, et quand elle quitte la scène, elle sera automatiquement désactivée.
- Votre cible/sélecteur sera appelé avec un temps delta ...
Dans 2d cocos il y a la section de mise à jour par défaut pour la minuterie.
Essayez ceci:
[self schedule:@selector(update:)];
- (void)update:(ccTime)dt {
}
Pour ceux qui veulent utiliser NSTimer au lieu de la méthode "calendrier", vous pouvez créer une classe comme les suivants:
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. Compte à rebours
- 2. Compte à rebours
- 3. compte à rebours
- 4. Compte à rebours dans Cocoa
- 5. FBJS textarea compte à rebours
- 6. Compte à rebours pour x à 0 en Javascript?
- 7. Javascript Cookie Timeout avec compte à rebours
- 8. Javascript Compte à rebours Afficher le lien
- 9. Compte à rebours Minuteur requis, Programmation iPhone
- 10. compte à rebours dans JSP/Servlets
- 11. Création d'un tableau de compte à rebours personnalisé jQuery
- 12. C# - Compte à rebours utilisant NumericUpDown comme intervalle
- 13. Minuteur de compte à rebours sur la page ASP.NET
- 14. API File d'attente de tâches: ETA et compte à rebours
- 15. Développement de widget: J'ai besoin de développer un widget de compte à rebours spécifique
- 16. Créer un compte utilisateur Vista
- 17. Comment créer un sol pour un jeu?
- 18. Créer un compte utilisateur avec VBScript
- 19. Pourquoi ma fonction de compte à rebours JavaScript ne fait-elle rien?
- 20. ASP.NET Application Services - comment créer un nouveau compte d'utilisateur?
- 21. Comment animer dans Cocos2d?
- 22. Comment dessiner un personnage humain en utilisant Cocos2d?
- 23. compte Google Apps à utiliser au lieu de compte Google pour l'application GAE avec un UserProperty
- 24. Iphone, Cocos2d
- 25. créer un compte ftp dans plesk en utilisant php
- 26. Compte multiple pour MobileStore?
- 27. Faire un mouvement irrégulier dans cocos2d?
- 28. cocos2d aide à trouver des points sur un cercle
- 29. Quelle langue recommanderiez-vous pour créer un script permettant de transférer des favoris/playlists YouTube d'un compte à un autre?
- 30. Comment créer un bookmarklet pour créer un grattage d'écran?
et de même utiliser [self unschedule: @selector (tick2 :)] inside tick2: quand vous voulez qu'il arrête de répéter. – adam
[auto-planning: @selector (cocher :)]; quand j'essaie de le faire dans mon code ... mon application ne trouve pas d'horaire ... c'est fonction de quelle classe ...? –
@mihir CCLayer Je crois, généralement en superclasse –