我如何在每次单击时都绘制一个新的矩形而不删除其他单击?

时间:2020-02-26 00:32:42

标签: python pygame

我是pygame的新手,我试图使游戏在每次单击鼠标时都绘制一个新矩形(而不会删除前一个),而我只是想不出该怎么做...:\

我以前曾经用pygame制作过一个井字游戏,在那里我没有遇到这个问题,而且好像我所做的几乎所有事情都差不多...

因此,我们将不胜感激任何帮助和/或解释。

fscanf(input, " (%d, %d)", &temp1, &temp2) == 2

如果您要测试,则是settings.py文件。

$ ./bin/ptrtoarraystruct < dat/2x8rand.txt
return: 0
content:
17987    1576
12911    4488
30688    5875
25617   16643
 8999   26249
29270   31857
 8954    2094
21390   27676

1 个答案:

答案 0 :(得分:1)

在playing_draw中,当用白色填充窗口时,将删除所有先前的矩形。然后,您仅绘制最近选择的矩形。

要绘制之前选择的所有矩形,您需要跟踪所有矩形。

将self.selected初始化为一个集合。列表也足够,但最终可能会重复。

    def __init__(self):
        pygame.init()
        self.window = pygame.display.set_mode((WIDTH, HEIGHT))
        self.running = True
        self.grid = testboard
        self.selected = set()
        self.mousePos = None
        self.state = "playing"
        self.playingButtons = []
        self.endButtons = []
        self.loadButtons()

然后,只要检测到点击,就将选择添加到self.selected

    def playing_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            if event.type == pygame.MOUSEBUTTONDOWN:
                selected = self.mouseOnGrid()
                if selected:
                    self.selected.add(selected)
                else:
                    print("not on board")
                    self.selected = None

最后,使用循环在playing_draw中绘制所有选定的矩形。

    def playing_draw(self):
        self.window.fill(WHITE)
        for selected in self.selected:
            self.drawSelection(self.window, selected)
        self.drawGrid(self.window)
        pygame.display.update()