У меня есть экран с разрешением 600x1000 пикселей, и мой плеер начинается в левом нижнем углу. Его координаты x и y равны (50, 900). Я рисую этого игрока на холсте и используя canvas.translate(-player.getX()+GAMEWIDTH/2, 0)
, чтобы убедиться, что плеер находится посередине экрана относительно оси x. Это приводит к тому, что мой игрок оказывается на (300, 900), однако координаты x и y игрока остаются на (50, 900). Это представляет проблему, потому что мне нужно, чтобы координаты игрока были такими же, как и его рендер-местоположение, потому что я использую события касания на прямоугольниках столкновения игрока, чтобы переместить его. Есть ли способ сделать координаты моего экрана относительно моих координат холста, чтобы координаты моего игрока соответствовали тому, где они фактически оказываются? Или может быть другой способ сделать это?Как сделать координаты относительно холста
ответ
Сенсорные элементы всегда основаны на x & y относительно самого элемента холста. Поскольку представление центрирует символ, переведя вид canvas.translate(-player.getX() + GAMEWIDTH/2 , 0);
, вам также необходимо применить этот перевод к touchEvent. Вы можете сделать это непосредственно в обработчике касания, или вы можете сохранить как относительную, так и абсолютную позицию для предметов в игровом мире. Это станет более важным, если элементы станут вложенными друг в друга. Обычно это делается путем хранения родительского элемента спрайта/объекта.
//example of how I usually handle object hierarchy
this._x = this.x + this.parent._x;
this._y = this.y + this.parent._y;
холст/стадия также хранить бы это центр как ._x и ._y, который будет родительским из объектов добавил, таким образом, когда вы создаете глобальную позицию, чтобы сделать ваши touchEvents против вместо прохождения в .x или .y вы передадите в ._x и ._y, которые уже переведены GAMEWIDTH/2.
- 1. Как получить сенсорные координаты относительно холста после масштабирования и перевода?
- 2. Координаты координаты пикселя холста после полосы прокрутки
- 3. Координаты холста Android?
- 4. Извлечь координаты из холста Tkinter
- 5. Raphaël конвертировать углы обратного вызова относительно холста
- 6. Как отрегулировать изображения холста относительно окна просмотра
- 7. Как перевести точки холста на координаты карты
- 8. Как определить координаты фрагмента относительно его сетки
- 9. Как преобразовать координаты окна относительно определенного вида?
- 10. контекстные координаты холста не соответствуют
- 11. Как получить положение координаты относительно позиции мыши?
- 12. Как вычислить координаты масштабируемого холста в Android
- 13. Как сделать снимок холста
- 14. Как сделать размер холста
- 15. JS: координаты мыши относительно элемента
- 16. Координаты чертежа PictureBox относительно формы
- 17. получить положение элемента холста после перетаскивания относительно холста
- 18. Получить координаты курсора как точки относительно JPanel
- 19. Как получить координаты x/y первой и последней точек рисованной дуги относительно верхнего левого угла холста?
- 20. Сделать область холста холста dragable
- 21. Преобразовать «декартовы координаты» в «полярные координаты относительно указанного пользователем источника»
- 22. Как сделать расположение метки относительно положения мыши
- 23. Возможно ли относительно позиционировать элемент OVER относительно позиционированного холста?
- 24. Перемещение элемента относительно мыши координаты внутри элемента
- 25. Координаты холста HTML5 дают странные углы
- 26. Как найти координаты позиции относительно некоторых якорей на холсте? (RectTransform.anchoredPosition3D)
- 27. CreateJS - масштабирование холста не масштабирует координаты мыши
- 28. Почему мои рисунки имеют размер относительно холста?
- 29. Как сделать текст плавающим справа от холста?
- 30. Как сделать часть холста кликабельным?
Когда вы совершаете обнаружение попадания прикосновений, вы не должны всегда передавать ему player.getX() + GAMEWIDTH/2. Единственный способ, с помощью которого вы можете сделать координаты относительно, - это применить само трансформирование. Обычно я поддерживаю relative.x и global.x для таких вещей. Родственником будет 50 в вашем случае, а глобальным будет 50 + GAMEWIDTH/2. – ericjbasti
спасибо, что положил меня на правильный трек. Я получил то, что хотел, добавив «player.getX() - GAMEWIDTH/2» в мой «recentTouchX» в моем классе «Вход». Я думал, что проблема связана с расположением моих прямоугольников, но на самом деле это было с моим TouchListener, который слушает View, а не Canvas. До любого перевода мой вид и холст были одинаковыми, но после перевода их не было, эта дополнительная строка кода компенсирует перевод. Поместите свой комментарий в качестве ответа и убедитесь, что ваша оценка - ваша. :) –