Kivy — Создание виртуального Dpad

Можно ли создать виртуальный экранный Dpad в приложении kivy? Я не считаю это возможным, потому что окно принимает только одно событие касания за раз, поэтому нет возможности иметь Dpad вместе с двумя кнопками действий (используя изображения на холсте, а не настоящие виджеты кнопок).

Я даже думал о том, чтобы метка принимала касание для Dpad, но рисование фактического изображения Dpad поверх метки привело бы к тому, что метка не уловила бы никаких касаний (догадка).

Затем я подумал о создании меньшего окна в углу, которое могло бы регистрировать свои собственные прикосновения, но я не видел ничего в документах kivy о создании окна в главном окне.


person chitondihk    schedule 29.11.2016    source источник
comment
А если я прикоснусь? Можно ли тогда обрабатывать несколько касаний, идущих сразу?   -  person chitondihk    schedule 29.11.2016
comment
Да, ты можешь это сделать. Kivy может обрабатывать практически любое количество одновременных касаний (ограниченное аппаратным обеспечением задолго до каких-либо проблем с программным обеспечением) — для этого вам не нужно делать ничего особенного, сенсорный API просто передает касания, когда получает их.   -  person inclement    schedule 29.11.2016
comment
Проблема в том, что вы держите большой палец на крестовине, а другим большим пальцем нажимаете другие кнопки. Касание, которое вы создали на Dpad, кажется, прерывается другими прикосновениями.   -  person chitondihk    schedule 29.11.2016
comment
@chitondihk, тогда это просто твоя плохая реализация. Каждое касание вызывает on_touch_down, on_touch_up, а если касание удерживается и перемещается, вызывается on_touch_move. Сделайте хорошую реализацию (или вставьте сюда свой код).   -  person Peter Badida    schedule 29.11.2016
comment
Имейте в виду, я говорю об окне, получающем все прикосновения... а не о виджетах кнопок и т. д.   -  person chitondihk    schedule 29.11.2016
comment
Я уже догадываюсь, в чем может быть дело...   -  person chitondihk    schedule 29.11.2016
comment
У Киви нет проблем с тем, что вы хотите. Если вам нужна помощь, опубликуйте минимальный пример, демонстрирующий вашу проблему с вашим собственным кодом.   -  person inclement    schedule 29.11.2016
comment
Есть ли способ идентифицировать прикосновение... например, присвоить виджету идентификатор?   -  person chitondihk    schedule 29.11.2016


Ответы (1)


Решил это. Проблема была не в моем коде, неудивительно, я программировал годами. Придумать логику — это самая легкая часть. Мои проблемы возникают из-за непонимания используемого набора API. Это как быть в сарае для инструментов и использовать ручную пилу для резки дерева, не зная, что в углу есть цепная пила с электроприводом, прикрытая деревянными досками.

Я не знал, что есть способ «идентифицировать» прикосновение, тем самым разделив их. Теперь, когда я могу отличить одно касание от другого, все выглядит хорошо. Мне просто нужно работать над своим «Dpad», пока он не станет достаточно беглым. Эта часть не так проста, потому что вам нужно правильное положение крестовины на экране, и вам нужно очень мало движений, чтобы изменить направление... или большой палец игрока будет скользить по всему экрану, лол. С моим опытом, я чувствую, что скоро добьюсь совершенства.

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

Ну, по крайней мере, я могу перестать натягивать эту веревку на шею. :D

person chitondihk    schedule 29.11.2016