所以我目前正在使用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()
答案 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