Могу ли я отключить мультитач для приложения Windows Phone?

В настоящее время я работаю над игрой для Windows Phone 7, используя версию XNA Cocos2d. Из-за правил игры мне это нужно, чтобы пользователь мог касаться только одной вещи за раз, но мультитач, кажется, всегда действует. Кроме того, я не знаю, является ли это ошибкой Cocos, но это также приводит к тому, что игра ведет себя хаотично (реагируя на одно касание, как будто их было много).

Думаю, мне придется корректировать каждое сенсорное событие в игре одно за другим, но мне было интересно, смогу ли я использовать что-то, чтобы быстро отключить мультитач или уменьшить количество касаний, принимаемых по одному за раз.

3 ответа

Я не уверен насчет Cocos2d-x для XNA. Но в обычном XNA, если вы хотите использовать только ввод одним нажатием, самый простой способ сделать это - использовать Mouse учебный класс. В сенсорной среде это все еще доступно - эмулируется с помощью касаний. Он реагирует только на одно касание за раз.

Каждый кадр вы можете получить список касаний. Поскольку их управление делегировано вашему коду, просто игнорируйте их, если у вас их больше одного. Другой вариант - использовать только первый, запомнить его TouchID и игнорировать все остальное. Я использовал первый вариант при переносе приложений мыши на телефон.

Сенсорный ввод Cocos должен рассматриваться где-то в игре, в доступном коде, поэтому у вас должен быть доступ к их точке входа.

Да, вы можете сделать это с Cocos2D-XNA. Вы устанавливаете TouchMode как OneByOne или AllAtOnce. OneByOne предоставит вам единственные методы подписи CCTouch, а AllAtOnce - методы подписи List.

public MyCtor() {
  TouchEnabled = true;
  TouchMode = CCTouchMode.OneByOne;
}

public override bool TouchBegan(CCTouch t) {
}

public override void TouchMoved(CCTouch t) {
}

public override void TouchEnded(CCTouch t) {
}

Теперь вы получаете только одно касание за раз. Однако невозможно отключить доставку всех касаний сенсорной панелью со всех пальцев. Как упомянул другой пользователь, вы просто проигнорируете это.

Помните, что вы получаете сенсорный идентификатор при каждом касании, который работает для сопоставления данных касания с каждым вызовом события начала, перемещения и завершения. Я предлагаю вам также использовать Touch ID, чтобы убедиться, что вы обрабатываете только те касания, которые вам нужны.

Другие вопросы по тегам