Android (AndEngine): рисование касанием с использованием частиц

В своем приложении я реализую функцию рисования с использованием частиц... в основном она должна работать почти так же, как Art of Glow (это приложение здесь: http://www.youtube.com/watch?v=ZIZpw1VslIk).

Я делаю следующее: создаю систему частиц и эмиттер (тип Point); при каждом событии касания я перемещаю излучатель в нажатое положение, чтобы казалось, что частицы следуют за пальцем...

Если я рисую медленно, это прекрасно работает, но если я двигаюсь быстрее, рисуя, например, прямую линию, линия будет фрагментирована.

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

Вот я и думаю, что приложение при быстром перемещении "не успевает" двигать излучатель в каждой точке и поэтому прямая линия будет фрагментирована... Итак, есть идеи, как это сделать такой же эффективный, как Art of Glow? Это приложение теряет только несколько входных данных, и я не понимаю, как автор сделал это таким...


person Beriol    schedule 08.10.2012    source источник


Ответы (2)


Когда вы получаете сенсорный ввод, вы используете только текущую позицию? Похоже, вы пытались создать твинер (что-то для создания промежуточных кадров), но Android может предоставить вам больше входных данных для быстрого движения. Ознакомьтесь с документами, особенно с разделом "Пакетная обработка".

По сути, вы можете использовать geHistoricalX/Y и getHistoricalEventTime, чтобы заполнить недостающие точки. Если это не дает идеального результата, это в сочетании с вашим текущим методом должно максимально приблизить вас к результату.

person Geobits    schedule 08.10.2012
comment
Спасибо за ответ! Да, я тоже так делаю (извините, забыл сказать!), но это ничуть не меняется. Как я уже сказал, это, вероятно, потому, что он не может перемещать эмиттер так быстро... Итак, вчера я попробовал еще одну вещь; Я сделал 2 другие системы частиц, подключенные к 2 другим эмиттерам; что я сделал, так это зациклил их, когда получил сенсорный ввод, так что в момент X был перемещен первый; в момент Y второй, в момент Z третий и так далее; Таким образом, у каждого излучателя есть время, чтобы действительно проявить себя на сцене. - person Beriol; 09.10.2012
comment
Это работает... ну, вроде как, потому что некоторые входные данные все еще теряются... На данный момент это лучше, чем ничего, но, возможно, есть лучший способ, которого я пока не знаю... - person Beriol; 09.10.2012

https://stackoverflow.com/a/21724810/472336

Проверьте это ... Это работает правильно для большинства сценариев, которые все еще нуждаются в улучшениях.

person Pramod    schedule 12.02.2014