我在pygame中编写一个简单的抽屉程序。我试图根据MOUSEMOTION事件将用户定义的形状绘制为用户定义的大小。我试过了:
pygame.draw.rect(screeny, (255,255,255), [posi[0], posi[1], e.pos[0]-posi[0], e.pos[1]-posi[1]], 1)
square = pygame.draw.rect(screeny, color, [posi[0], posi[1], e.pos[0]-posi[0], e.pos[1]-posi[1]], 1)
pygame.display.flip()
但它没有用。我还尝试添加一个列表并覆盖列表中的第一个项目,并在发生事件时附加到该项目,但是不起作用。
问题重复:如何根据事件在pygame中制作可调整大小的正方形?
这里有什么帮助?谢谢!
答案 0 :(得分:2)
我没有足够的代码可以使用您的示例。但我能够创建一些代码来创建框并将其留在屏幕上。
import pygame, sys
from pygame.locals import * //Allows MOUSEMOTION in stead of pygame.MOUSEMOTION
window_size = (800, 600)
clock = pygame.time.Clock()
FPS = 60
mousepos = None
boxes = []
screen = pygame.display.set_mode(window_size)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
while 1:
screen.fill(WHITE)
events = pygame.event.get()
for event in events:
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == MOUSEBUTTONDOWN:
mousepos = [event.pos[0], event.pos[1], 0, 0]
if event.type == MOUSEBUTTONUP:
boxes.append(mousepos)
mousepos = None
if event.type == MOUSEMOTION and mousepos != None:
mousepos = [mousepos[0], mousepos[1], event.pos[0] - mousepos[0], event.pos[1] - mousepos[1]]
for box in boxes:
pygame.draw.rect(screen, BLACK, box, 1)
if mousepos != None:
pygame.draw.rect(screen, BLACK, mousepos, 1)
pygame.display.update()
clock.tick(FPS)
我希望这会有所帮助。
注意:小心事件队列,这很危险。切勿用它来检查按键。使用" pygame.key.get_pressed()[K_(此处为Key)]"。如果您需要阻止此操作两次,请创建一个包含以前值的列表,如下所示:
prev = pygame.key.get_pressed()
if prev[K_(key here)] != pygame.key.get_pressed()[K_(Key here)]
do your stuff...