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

    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 - ширина и высота клетки.

    Удачи в разработке!
    Ответ написан
    Комментировать
  • Не получается создать персонажа с помощью класса?

    TalismanChet
    @TalismanChet
    Лицо зла
    Вы используете image как аргумент для Flopa.__init__,
    просто поменяйте
    def __init__(self, image, x, y,):
    на
    def __init__(self, _image, x, y,):
    и вместо
    self.image = transform.scale(image.load("flopa.png"), (50, 50))

    используйте
    self.image = transform.scale(image.load(_image), (50, 50))

    Tакже, у вас имеется излишняя запятая здесь:
    def __init__(self, image, x, y>>,<<)
    Ответ написан
    Комментировать
  • Почему не получается создать персонажа с помощью класса?

    TalismanChet
    @TalismanChet
    Лицо зла
    Вы используете image как аргумент для Flopa.__init__,
    просто поменяйте
    def __init__(self, image, x, y,):
    на
    def __init__(self, _image, x, y,):
    и вместо
    self.image = transform.scale(image.load("flopa.png"), (50, 50))

    используйте
    self.image = transform.scale(image.load(_image), (50, 50))

    Tакже, у вас имеется излишняя запятая здесь:
    def __init__(self, image, x, y>>,<<)
    Ответ написан
  • Почему выдает ошибку AttributeError: 'Enemy' object has no attribute 'get_height'?

    TalismanChet
    @TalismanChet
    Лицо зла
    Вы создали Enemy, и, следуя из того, что у вас написано, возможно, следует использовать enemy.ship_img.get_height() вместо enemy.get_height() если вы желаете получить высоту изображения enemy.
    Ответ написан
    Комментировать