J'ai une simple application OpenGL: ES en cours d'exécution (c'est un jeu). Le jeu charge et présente à l'utilisateur un "nouveau bouton de jeu" et vous êtes dans le jeu. J'utilise touchesBegan/touchEnded pour gérer les touches. Ensuite, je prends les coordonnées et les traite en conséquence.touchesEnded
J'ai également un NSTimer tournant à 30Hz qui appelle renderScene qui dessine les graphiques à l'écran.
De temps en temps sur l'appareil (je ne l'ai pas encore fait sur le simulateur), je ne reçois plus d'événements tactiles après le premier. J'ai essayé de déboguer ceci sur l'appareil et il apparaît qu'après avoir reçu le premier événement touchSnded, l'appareil est bombardé par des appels touchEnded. Je ne reçois JAMAIS un autre contactBegan appelle quand cela arrive. Si j'appuie sur la maison et que je reviens dans le jeu, tout ira généralement bien.
Voici le code pour mon entrée, tel qu'il existe dans mon code EAGLView.m
#pragma mark
#pragma mark UserInputStuff
#pragma mark
#pragma mark
#pragma mark touchesBegan
#pragma mark
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
firstTouch = [touch locationInView:self];
lastTouch = [touch locationInView:self];
[(MyGameAppDelegate*)[[UIApplication sharedApplication] delegate] HandleTouchEvent:firstTouch];
}
#pragma mark
#pragma mark touchesEnded
#pragma mark
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event
{
UITouch *touch = [touches anyObject];
lastTouch = [touch locationInView:self];
[(MyGameAppDelegate*)[[UIApplication sharedApplication] delegate] HandleTouchEnded:lastTouch];
}
Et voici le code tel qu'il existe dans mon délégué app
#pragma mark
#pragma mark HandleTouchEnded
#pragma mark A function to react to the touch that is no longer present on the screen
#pragma mark
- (void)HandleTouchEnded:(CGPoint)coordinate
{
if(_state == kState_Title)
{
[self TitleCollisionDetection:coordinate];
if(_buttonHighlighted)
{
_textures[kTexture_Background] = [[Texture2D alloc] initWithImage:[UIImage imageNamed:@"T4Background.png"]];
glBindTexture(GL_TEXTURE_2D, [_textures[kTexture_Background] name]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
[self resetGame];
}
}
}
Et voici le code qui configure le minuteur qui se déclenche pour gérer le rendu.
//Start rendering timer
_timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/kRenderingFPS) target:self selector:@selector(renderScene) userInfo:nil repeats:YES];
[UIApplication sharedApplication].idleTimerDisabled = YES;
Je fais évidemment quelque chose de stupide. Qu'est-ce que je rate? Pourquoi touche-t-on le feu si souvent?
Je pense que vous avez manqué quelque chose ici.L'appel firstTouch est [(MyGameAppDelegate *) [[délégué UIApplication sharedApplication]] HandleTouchEvent: firstTouch]; et la seconde est [(MyGameAppDelegate *) [[UIApplication sharedApplication] delegate] HandleTouchEnded: lastTouch]; – K2Digital