Приятно видеть, что вы прилагаете большие усилия, чтобы решить эту проблему самостоятельно, и что вы редактируете вопрос с работой, которую вы проделали до сих пор!
То, что я добавил в код, в основном позволяет пользователю менять место рисования куба. Если вы хотите нарисовать несколько кубов, их позиции основаны на щелчках мышью пользователя, отредактируйте свой вопрос, чтобы добавить эти детали, и оставьте комментарий ниже.
Сначала я написал новый класс под названием Cube
, который по сути имеет тот же код, что и Create
. Я не буду вдаваться в подробности, но обычно в объектно-ориентированном программировании объекты - это существительные , а их методы - actions . Ваш класс противоположен, но это не то, как обычно пишется объектно-ориентированный код.
Я добавил метод update()
, который просто обновляет некоторые из полей объекта *1014* в соответствии с положением мыши. Ваш исходный код определял поля класса или статические переменные . Я не буду вдаваться в подробности, но если бы мы создали 100 экземпляров куба, мы бы хотели иметь позиции для всех кубов , верно? В подобных случаях вы работаете с объектами , , а не с классом .
Затем, есть одна переменная, которая становится равной true после первого щелчка мыши, и в результате куб начинает рисоваться на экране.
Вот фиксированный код:
import pygame
running = True
pygame.init()
screen = pygame.display.set_mode((800, 500))
class Cube:
def update(self):
self.cx, self.cy = pygame.mouse.get_pos()
self.square = pygame.Rect(self.cx, self.cy, 50, 50)
def draw(self):
pygame.draw.rect(screen, (255, 0, 0), self.square)
cube = Cube()
drawing_cube = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
cube.update()
drawing_cube = True
screen.fill((0, 255, 0))
if drawing_cube:
cube.draw()
pygame.display.flip()
pygame.quit()
quit()
Я надеюсь, что этот ответ помог вам, и если у вас есть дополнительные вопросы, пожалуйста, оставьте комментарий ниже!