Как сделать сетку для объектов а pygame?

Есть игра. Хочется реализовать некую сетку, чтобы при нажатии левой кнопки мыши, позиция изображения была в центре ячейки, на которую была нажата кнопка мыши.

Вот как это должно выглядеть:
618aaec7e2497335606533.png

Как реализовать такую сетку с помощью библиотеки Pygame?
  • Вопрос задан
  • 737 просмотров
Решения вопроса 1
TalismanChet
@TalismanChet
Лицо зла
Скорее всего, вы имеете в виду "изображение должно быть выравнено" по центру клетки.

1. реализация сетки

Для создания сетки много не нужно: достаточно научится верно представлять координаты. Для нахождения позиции отрисовки в левом-верхнем углу, достаточно умножить координаты по сетке на размер 1 кл.

2. реализация отрисовки по центру клетки

Для отрисовки по центру клетки, нужно больше сделать. Я написал функцию, которая возвращает поверхность, которую следует отрисовывать слева-сверху клетки. Возможно, вы сами разберётесь, как она работает. Простая геометрия)

import pygame


def align_center(cell_width, cell_height, surface_to_align, not_return_surface_but_coords=False):
    cw, ch, sf = cell_width, cell_height, surface_to_align
    cx, cy  = cw//2, ch//2
    dx, dy = sf.get_width()//2, sf.get_height()//2
    tx, ty = cx-dx, cy-dy
    ret = pygame.Surface((cw, ch), pygame.SRCALPHA)
    ret.blit(sf, (tx, ty))
    if not not_return_surface_but_coords:
        return ret
    else:
        return [tx, ty]
    return -1
#


Если помимо всех аргументов передать переменную или значение, НЕ равное 0 или False, то вместо поверхности вы получите координаты, где отрисовывать. Это может быть полезно для оптимизации, если игру нужно оптимизировать, то воспользуйтесь не готовой выровненной поверхностью, а координатами, и уже добавив их к основнным координатам клетки, отрисуйте.

3. реализация нахождения клетки по координате

Здесь всё просто.

x = mx // cw
y = my // ch
,
где mx, my - координаты клика, а cw, ch - ширина и высота клетки.

Удачи в разработке!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы