У меня есть простое приложение OpenGL: ES, работающее (это игра). Игра загружается и представляет пользователю «новую кнопку игры», а затем вы находитесь в игре. Я использую touchhesBegan/touchesEnded для обработки касаний. Затем я беру координаты и обрабатываю их соответственно.touchesEnded
У меня также есть NSTimer, работающий на 30 Гц, который вызывает renderScene, который рисует экранную графику.
Время от времени на устройстве (я еще не знаю, как это произошло на симуляторе), я не получаю больше сенсорных событий после первого. Я попытался отладить это на устройстве, и кажется, что после того, как я получу первое касание события, входящего в систему, устройство подвергается бомбардировке с помощью touchEnded вызовов. Я НИКОГДА не получаю еще один звонок, когда это происходит. Если я приду домой и вернусь в игру, все будет нормально работать.
Вот код для моего входа, как она существует в моем коде 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;
Я, очевидно, делаю что-то немое. Что мне не хватает? Почему прикосновения так часто срабатывают?
Я думаю, вы что-то пропустили. Первый вызов: [(MyGameAppDelegate *) [[UAppication sharedApplication] delegate] HandleTouchEvent: firstTouch]; , а второй - [(MyGameAppDelegate *) [[UAppication sharedApplication] delegate] HandleTouchEnded: lastTouch]; – K2Digital