Мультитач Cocos2d TouchesBegan Индивидуальные и наборы касаний

Я разрабатываю приложение, и у нас возникают проблемы с мультитач-нажатием и слегка отложенным мультитач-нажатием (что приводит к 2 отдельным вызовам TouchesBegan).

Проблема, с которой мы столкнулись, заключается в том, что игрок одновременно нажимает двумя пальцами:

Иногда его можно зарегистрировать как NSSet с touches.count = 2.

OR

Иногда, если игрок даже немного опаздывает на 2-е касание, он регистрирует два вызова CCTouchesBegan, каждый с touches.count = 1.

Каким будет самый простой способ зарегистрировать оба вызова TouchesBegan с touches.count = 2 И когда игрок немного опаздывает на 2-е касание (два вызова TouchesBegan) с одним и тем же обратным вызовом?

Моя первоначальная мысль состояла в том, чтобы получить [отметку времени события] и сравнить ее с предыдущей отметкой времени, а затем проверить, находится ли она в пределах определенного интервала времени...

Как лучше всего это сделать?


person KorinW    schedule 20.09.2012    source источник


Ответы (1)


Вам не нужно сравнение временных меток. Вместо использования объекта touches NSSet вы можете использовать event для получения касаний.

- (void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if( [[event allTouches] count] == 2 )
    {
        // Do your thing here
    }
}

Примечание. Если вы нажмете двумя пальцами с небольшой задержкой, ccTouchesBegan будет вызван дважды, но при втором вызове объект event будет иметь два касания.

person Sohaib    schedule 21.09.2012
comment
эй, спасибо, Сохаиб! Сколько времени потребуется, чтобы объект события сообщил о 1 количестве касаний для второго вызова TouchesBegan? - person KorinW; 22.09.2012
comment
Я только что проверил это, и кажется, что объединение событий основано на том, удерживаете ли вы первый палец, когда второй палец нажимает вниз? Это правильно? - person KorinW; 22.09.2012
comment
Да, это правильно. Вы пытаетесь зафиксировать двойное касание двумя касаниями? - person Sohaib; 22.09.2012
comment
в основном мы пытаемся сделать отказоустойчивым для игрока, поэтому, если он небрежно выполняет мультитач (с двумя нажатиями ИЛИ с касанием первого пальца, а затем с небольшой задержкой касания вторым пальцем), это все равно будет считаться мультитач. - person KorinW; 24.09.2012