【问题标题】:Make pygame draw cubes wherever the user clicks让pygame在用户点击的任何地方绘制立方体
【发布时间】:2018-09-06 17:18:34
【问题描述】:

我想做一种“关卡编辑器”作为练习。 我有这个代码:

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

但是,它不会创建多个正方形;它只是重新定位已经创建的正方形。

【问题讨论】:

    标签: python pygame draw


    【解决方案1】:

    它完全按照您的指示去做:更新游戏中唯一的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()
    

    现在,作为学生的练习,您能否简化此操作,使其仅将最新的立方体添加到现有屏幕,而不是为每个新立方体重新绘制整个游戏区域?

    【讨论】:

      【解决方案2】:

      谢谢,普鲁恩!但是对于在我之后阅读此内容的任何人,这里是完整的代码:

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

      干杯!

      P.S 我已将您的答案标记为已接受

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        相关资源
        最近更新 更多