Здесь две вещи.
- Когда вы перемещаете прямоугольник, изменяя его координаты, вы должны перерисовать.
pygame
не делает это автоматически.Если вы не вызываете нужные функции, экран не меняется. - У вас есть
User_Block = User_Block()
.Не используйте одно и то же имя класса для его экземпляра.Как минимум используйте заглавную букву: user_block = User_Block()
.Вы собираетесь перезаписать ссылку на класс.
Как перемещать изображения на экране
В своем коде вы используете pygame.draw.rect
вместо Поверхность , поэтому, чтобы оставаться в согласии с этим выбором, вам нужно снова позвонить:
pygame.draw.rect(screen, ...)
после обновления координат.Я предлагаю поместить команду в метод ваших классов, который вы можете вызывать каждую итерацию основного цикла, когда вам нужно перерисовать позицию.
Не забудьте удалить прямоугольник в предыдущей позиции: pygame не делает это длявы.Вам нужно найти способ сделать это.
Самый простой, но менее эффективный способ - заполнить весь экран цветом фона, вызвав screen.fill(BLACK)
непосредственно перед перерисовкой.Менее эффективно, потому что вы фактически перерисовываете весь экран и удаляете также другие изображения, которые должны перерисовываться при каждой итерации основного цикла.
Это соответствующий код, поместите его сразу после строки, в которой вы обновляете координату:
screen.fill(BLACK) #note: black is (0, 0, 0) not (255, 255, 255).
user_block.draw()
for en in Enemy_List:
en.draw()
Конечно, вам нужно определить метод draw
, как я уже говорил выше.
Наконец, в системе координат pygame
, y
увеличивается по направлению к нижней частиэкран.Следовательно, чтобы идти вверх , вам нужно уменьшить значение y
.
Заключительное примечание: , как я уже сказал, рисование, как это, неэффективно.В этом простом случае это хорошо, но для сложных игр, в которых движется много вещей, игра замедлится.Мы можем сделать лучше, но я думаю, что объяснение здесь заходит слишком далеко за рамки ответа, вы можете сами исследовать, как это сделать, взглянуть на Surface и метод blit
, чтобы начать.