有两个鼠标事件,一个接着一个,并且都保存为不同的变量

时间:2014-09-05 22:17:27

标签: python python-2.7 pygame mouseevent mouse

所以我目前正在使用pygame在屏幕上打印一个矩形。无论用户点击何处,我都希望矩形立即移动到那里。我得到了它的工作,但现在我希望用户能够在每次移动时更改矩形的形状和大小。我已完成所有设置,我只是遇到了鼠标事件的问题。

所以我基本上想要点击一次,将该坐标存储为变量,再次单击,并将新点击存储为变量。

我现在的代码现在将在坐标中传递我点击左上角的位置的坐标,但同时它将这些坐标放在右下角,所以基本上会出现一个小点。

import pygame

class Rectangle:
    def __init__(self, corner1, corner2, color):
        self.corner1 = corner1
        self.corner2 = corner2
        self.color = color

    def setCorner1(self, newCorner1):
        self.corner1 = newCorner1

    def setCorner2(self, newCorner2):
        self.corner2 = newCorner2

    def paint(self, surface):
        pygame.draw.rect(surface, self.color, (self.corner1[0], self.corner1[1], int(self.corner1[0] - self.corner2[0]), int(self.corner1[1] - self.corner2[1])), 0)

def main():
    pygame.init()

    size = width, height = 800,700
    backgroundColor = [0, 0, 255]
    #c = Circle([400,300],40,[255,128,128] )
    r = Rectangle([400,300],[500,400],[255,128,128] )

    screen = pygame.display.set_mode(size)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
            if event.type == pygame.MOUSEBUTTONDOWN:
                r.setCorner1(event.pos)
            if event.type == pygame.MOUSEBUTTONDOWN:
                r.setCorner2(event.pos)

        # Handle Drawing:
        screen.fill(backgroundColor)
        r.paint(screen)
        pygame.display.flip()

main()

1 个答案:

答案 0 :(得分:1)

现在每次单击它都会将corner1和corner2设置为相同的值。代码在第一个if语句上运行,看到它是真的并执行它。然后它移动到第二个if语句(独立于第一个),看到​​一个也是真的并执行那个。

我假设您要将第一次点击存储为corner1,然后将后续点击存储为corner2?为了做到这一点,你需要有一些区别于两者的东西。我添加了一个名为switch

的变量
switch = 0
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        return
    elif event.type == pygame.MOUSEBUTTONDOWN:
        if switch == 0:
            r.setCorner1(event.pos)
            switch = 1
        else:
            r.setCorner2(event.pos)
            switch = 0