2012-02-14 5 views
0

Я делаю iPhone с использованием OpenGL. У меня возникла проблема, когда я начал писать интерфейс управления играми. У меня есть четыре кнопки (Left, Right, Attack, Jump), и мне нужно иметь возможность нажимать и одновременно. Мне нужно, как функция touchsStationary (есть только штрихиBegin, Moved и End). Мне нужна функция, которая возвращает все пальцы в данный момент на экране (не имеет значения, их текущие фазы), но эти функции возвращаются только тогда, когда я начинаю нажимать, когда я двигаю пальцем или когда поднимаю палец ... Нет функции, когда палец остается на месте, нажимая кнопку.Обработка Multitouch на iPhone

Я попытался написать код с помощью touchhesBegin, touchsMoved и touchEnd, но одна функция возвращает список пальцев, который находится в другом порядке, чем другие, поэтому он закручивает все, и мультитач становится невозможным.

Идеальная функция вернет все пальцы в настоящее время на экране, после чего я смогу перебирать все их, проверяя, соответствуют ли их позиции позиции какой-то кнопки, и затем активируйте эту кнопку. Как я могу это достичь?

ответ

0

В основном вы говорите о реализации значительного фрагмента функциональности графического интерфейса Touch-Touch со всей сложностью, которая приносит. Вам придется реализовать небольшую конечную машину, которая отслеживает, что происходит с каждой кнопкой. Например, кнопка запускается в состоянии «не нажата». Если вы обнаружите касание внутри кнопки, оно переходит в «нажатое» состояние. Когда прикасается к движению (или завершается или отменяется), вы проверяете, остается ли кнопка касания. Если это не так, вы возвращаетесь обратно в состояние «не нажато». Ваш игровой цикл может проверять состояние кнопки и соответствующим образом генерировать события (например, некоторым кнопкам может потребоваться генерировать события непрерывно при нажатии, в то время как другие генерируют однократное событие при их выпуске).

+0

Но проблема в том, что деталь «проверяет, содержит ли кнопка все еще касание». Как я могу это сделать? Я не мог найти для этого никаких функций. Я получаю только события, когда прикосновения начинаются, перемещаются или заканчиваются. Если пользователь удерживает кнопку без движения, она не будет замечена. Это то, что мне нужно, чтобы проверить, есть ли прикосновение в определенной позиции. – HLorenzi

+0

Есть касание внутри кнопки, если есть касание внутри кнопки (обнаружено в результате касанияBegan/Перемещенный вызов), и с тех пор вы не получили никаких касанийMoved/Ended/Canceled: звонки, которые указывают, что нет касания внутри кнопки. У вас есть *, чтобы сохранить одно дополнительное значение для каждой кнопки (возможно, логическое значение с именем 'isPressed'), чтобы вы могли запросить кнопку о ее текущем состоянии между событиями касания. Сохраняя состояние кнопки, у вас есть часть постоянной информации, которая не полагается на обратные вызовы касания. – warrenm

+0

Да, я храню isPressed для каждой кнопки. Но проблема возникает из-за мультитач-функциональности. Я не могу отслеживать, является ли какое-то прикосновениеМост-событие одним и тем же пальцем какого-либо события touchsBegin, поэтому, например, нет способа узнать, перемещал ли он его палец по экрану и останавливался на второй кнопке без меня, нажав первую кнопку - потому что в этом сценарии не было затронутых вариантов, и нет никакого способа узнать, был ли перста, который был перемещен, тем же самым, что нажал первую кнопку (чтобы я мог ее удалить). Это немного сложно объяснить ... – HLorenzi

Смежные вопросы