Есть ли способ переместить прямоугольник к определенной координате в Pygame? - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь построить игру про змей в пигмеях. Голова змеи - это прямоугольник, который я нарисовал:

def head(head_x, head_y):
    pygame.draw.rect(wn, green, [head_x, head_y, 20, 20])

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

segments = []
new_segement = pygame.draw.rect(wn, green, [300, 300, 20, 20])
segments.append(new_segement)for index in range(len(segments) -1, 0, -1):
    segment_x = segments[index - 1].x
    segment_y = segments[index - 1].y
    segments[index].centerx = segment_x
    segments[index].centery = segment_y

if len(segments) > 0:
    segments[0].centerx = head_x
    segments[0].centery = head_y

Я думаю, что я неправильно использую атрибуты rect.centerx и rect.centery. Или, может быть, я полностью выключен.

1 Ответ

0 голосов
/ 03 апреля 2020

Из вашего кода, только один элемент в сегментах списка, прежде чем вы запустите свой для l oop. Таким образом, диапазон range(len(segments) -1, 0, -1) будет ничем, и для l oop не будет выполнено.

Даже если код, который вы показываете в al oop, сегменты списка всегда будут сбрасываться с помощью segments = [] в первой строке.

Другая проблема с new_segement = pygame.draw.rect(wn, green, [300, 300, 20, 20]). Эта линия уже заставит прямоугольник рисовать по заданной координате «300, 300». Вы должны сначала вычислить координаты x & y прямоугольника, а затем выполнить что-то вроде: pygame.draw.rect(wn, green, [x, y, 20, 20])

...