我试图熟悉pygame,因此从一个简单的程序开始,该程序绘制一个矩形并用鼠标将其移动。矩形绘制得很好,但是它不会随鼠标位置移动,我不知道为什么。
我发现另一个与此问题有关的人,但是此修复程序对我没有用,而且缠绕的时间比我认为的长得多。
pygame.init()
screen = pygame.display.set_mode((500,300))
# --- mainloop / event loop ---
running = True
playerstartposX = 100
playerstartposY = 100
playerwidth = 50
playerheight = 50
screen.fill((30,30,30))
newrect = pygame.draw.rect(screen, (255,0,0) , ( playerstartposX ,
playerstartposY ,
playerwidth ,
playerheight))
pygame.display.update()
while running:
pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == 4: #if event is mouse motion
newrect.move(event.pos) #move the rectangle to mouse pos
pygame.display.update()
pygame.quit()
答案 0 :(得分:3)
4
不是事件类型。事件类型为MOUSEMOTION
(请参见pygame.event
)。
创建一个pygame.Rect
对象:
newrect = pygame.Rect(playerstartposX, playerstartposY, playerwidth, playerheight)
在事件发生时更改其位置:
if event.type == pygame.MOUSEMOTION:
newrect.center = event.pos
在主应用程序循环中,您必须不断
如果您想每秒控制帧数,则可以将参数传递给.tick()
的方法pygame.time.Clock
而不是pygame.time.delay
:
import pygame
pygame.init()
screen = pygame.display.set_mode((500,300))
clock = pygame.time.Clock()
running = True
playerstartposX = 100
playerstartposY = 100
playerwidth = 50
playerheight = 50
newrect = pygame.Rect(playerstartposX, playerstartposY, playerwidth, playerheight)
while running:
clock.tick(60)
# handle the events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEMOTION:
newrect.center = event.pos
# clear the display
screen.fill((30,30,30))
# draw the rectangle
pygame.draw.rect(screen, (255,0,0), newrect)
# update the display
pygame.display.update()
pygame.quit()
答案 1 :(得分:0)
首先,您需要检查的事件类型是pygame.MOUSEMOTION
(我相信它是1024?),并且您正在使用4进行检查。
然后,您必须在主循环的每次迭代中重新绘制矩形以反映更新后的位置