Заставьте Pygame рисовать кубики везде, где пользователь нажимает - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу сделать своего рода «редактор уровней» в качестве упражнения. У меня есть этот код:

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
drawing_cube2 = 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()

Однако он не создает несколько квадратов; он просто перемещает уже созданный квадрат.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Спасибо, Чернослив! но для любого, кто читает это после меня, вот полный код:

import pygame

cube_list = []
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
drawing_cube2 = False

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:   # Make a new cube
            cube = Cube()
            cube.update()
            cube_list.append(cube)
            drawing_cube = True

    screen.fill((0, 255, 0))
    if drawing_cube:           #New cube made; draw them all.
        for cube in cube_list:
            cube.draw()

    pygame.display.flip()


pygame.quit()

Ура! * * 1004

P.S Я отметил ваш ответ как принятый

0 голосов
/ 06 сентября 2018

Он делает именно то, что вы сказали ему: обновить единственный и единственный объект Cube в игре, а затем перерисовать экран и этот один объект. Если вы хотите несколько кубов, вы должны создать каждый. Возможно, что-то вроде этого:

cube_list = []          # List of all cubes

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:   # Make a new cube
            cube = Cube()
            cube.update()
            cube_list.append(cube)
            drawing_cube = True

    screen.fill((0, 255, 0))
    if drawing_cube:           #New cube made; draw them all.
        for cube in cube_list:
            cube.draw()

    pygame.display.flip()

Теперь, в качестве упражнения для студента, можете ли вы упростить это, чтобы он просто добавил самый последний куб на существующий экран вместо перерисовки всей игровой области для каждого нового куба?

...