Если у меня есть приложение openGL, у которого есть 2 потока (не созданные мной, это стандартные «предоставленные» потоки). Те существа:Любой способ получить координаты касания от не-UI-потока
- GLRendering нить
- Главных/UI нить
И позволяет сказать, что в моем рендеринге нити Обращает спрайт следующим образом: (методы, показанные мои собственные методы)
sprite.draw(); //This will draw the sprite at it's own internal X and Y coordinates
Теперь на UI тему, я захватить текущее положение пальца: (происходит следующее в onTouchEvent (MotionEvent событие)) ....
case MotionEvent.ACTION_MOVE: {
sprite.setX(event.getX());
sprite.setY(event.setY());
}
Итак, случается так, что мой спрайт рисуется там, где палец позволяет пользователю перетащить его по экрану.
Тем не менее, очевидно, что два потока не гарантируется для запуска 'поочередно' следующим образом:
интерфейс резьбы: Захват положение пальца и установить (X: 10, Y: 10)
рендерер резьбы: Розыгрыш в 10, 10
интерфейс резьбы: Захват положение пальца и установить (X: 22, Y: 31)
Renderer Thread Розыгрыш на 22, 31 и т.д. .......
выше является большим, но то, что происходит, когда это происходит:
UI тему: Захват положение пальцев и установить (X: 10, Y: 10)
Renderer тема: нарисовать на 10, 10
Renderer Тема: Нарисовать на 10, 10 < < Рисует снова в том же положении, даже если палец физически в настоящее время переехал в другое место, что приводит к смещению между экранной позиции объекта и физической positionon пальца, части экрана
интерфейс резьбы: положение пальцев захвата и установить (X: 22, Y: 31)
рендерер резьбы дро на 22, 31 и т.д. .......
Это может показаться причиной «изменчивости» на чертеже объекта.
Итак, что я спрашиваю, есть ли какой-либо способ силы рендеринг нить какой-то образом восстановить фактическое текущее физическое положение указателя в настоящее время вниз/палец, прежде чем он рисует его? Или какое-то другое решение проблемы? (Положите просто, что поток рендеринга всегда должен иметь доступ к текущей позиции, а не к предыдущей позиции).
Привет @ Kasra - Не уверен, что я понимаю. Я также пробовал что-то похожее на то, что вы предлагаете (получение суммы, которую двинул палец и добавление ее в pos спрайта). Но, когда onTouch «пропущен», это значение становится 0, и спрайт не перемещается для этого тика, а затем на следующем, он ловит и перемещается в два раза. Таким образом, с пальцем, движущимся с постоянной 10 px за галочку. Он переместит 10, нарисует на +10, переместит 10, затем (если onTouch пропустит) переместится 0, затем на следующий шаг галочки 20, Если я понимаю вас, все, что вы делаете, уменьшает вдвое эту сумму, чтобы она не двигалась с пальцем, но медленнее? – Zippy
Thnk прокрутки, вот что мне нужно. Объект «прилипает» к пальцу независимо от того, насколько быстро или медленно движется палец. Мне нужно найти способ сказать: «Вместо того, чтобы перемещаться 0, затем 20 на следующий тик, просто переместите 10 на оба тика», чтобы сохранить согласованность. Подобно Linear Interpolation, я предполагаю, что я уже использую в своем основном цикле (для моих спрайтов). – Zippy
Итак, да - все, что вам нужно сделать, это реализовать описанный мной метод. Я добавил больше деталей, чтобы было легче понять. – Kasra