У меня запущено простое приложение OpenGL: ES (это игра). Игра загружает и предоставляет пользователю «новую игровую кнопку», и вы попадаете в игру. Я использую touchesBegan / touchesEnded для обработки касаний. Затем я беру координаты и обрабатываю их соответственно.
У меня также есть NSTimer, работающий на частоте 30 Гц, который вызывает renderScene, который рисует экранную графику.
Время от времени на устройстве (мне еще не приходилось это делать на симуляторе), после первого события я больше не получаю сенсорные события. Я попытался отладить это на устройстве, и кажется, что после того, как я получаю первое событие touchesEnded, устройство засыпается вызовами touchesEnded. Я НИКОГДА не получаю еще одного прикосновения. Начало звонка, когда это происходит. Если я нажму домой и вернусь в игру, все будет нормально работать.
Вот код для моего ввода, так как он существует в моем коде 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];
}
А вот код, как он существует в моем делегате приложения
#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];
}
}
}
А вот код, который настраивает таймер, который срабатывает для обработки рендерера.
//Start rendering timer
_timer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / kRenderingFPS) target:self selector:@selector(renderScene) userInfo:nil repeats:YES];
[UIApplication sharedApplication].idleTimerDisabled = YES;
Я, очевидно, делаю что-то глупое. Что мне не хватает? Почему прикосновения заканчиваются так часто?