pygame — Создание интерактивных с мышью элементов на прокручиваемой поверхности.

Итак, наша карта мира для игры о завоеваниях в стиле риска, которую мы делаем, состоит из матрицы взаимодействующих с мышью объектов «страны», содержащих свои собственные значения, такие как имя, владелец и количество юнитов.

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

Я знаю, что этот тип прокрутки работает - это не то, о чем этот вопрос - вопрос в том, не помешает ли нам использование такого типа прокрутки позволить игроку правильно взаимодействовать со странами на карте с помощью мыши?

Мы уже пробовали форму прокрутки, при которой мы просто смещали индексы матрицы карты, чтобы перемещать позиции стран таким образом, но это создавало проблемы с обработкой сервером приказов об атаке, поскольку одни и те же две страны могли иметь разные координаты для разных игроков. Описанный мной метод прокрутки позволил бы самой карте оставаться неподвижной для всех игроков, но как определить положение мыши относительно карты мира, а не ее положение на игровом экране?


person Cobalt    schedule 11.02.2016    source источник


Ответы (1)


Вы должны перевести положение мыши на экране в мировые координаты. Когда вы прокручиваете карту, вы создаете смещение, и вы должны использовать его для перевода.

Скажем, если карта не прокручивается ((0, 0) карты находится на (0, 0) экрана), а игрок нажимает на (12, 12), вы знаете, что он нажал на (12, 12) мира.

Когда этот игрок прокрутил карту вправо (скажем, на 100 пикселей), вы засветили поверхность карты на (-100, 0) экрана. Теперь, если игрок нажимает на (12, 12), вы можете вычислить, что (12, 12) экрана на самом деле (112, 12) на карте (screenX - scrollX, screenY - scrollY).

Поэтому, если вы хотите определить, на какую страну кликнул игрок, всегда используйте переведенные координаты (а не координаты экрана), и проблема, которую вы описываете, исчезнет.

person sloth    schedule 11.02.2016