更新矩形的位置

2024-10-01 09:39:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图熟悉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()

Tags: eventiftypedisplayupdate鼠标screenpygame
2条回答

首先,您需要检查的事件类型是pygame.MOUSEMOTION(我相信是1024?),您要检查的是4

然后您必须在主循环的每次迭代中重新绘制rect以反映更新的位置

4不是事件类型。事件类型是MOUSEMOTION(参见^{}

创建^{}对象:

newrect = pygame.Rect(playerstartposX, playerstartposY, playerwidth, playerheight)

事件发生时改变其位置:

if event.type == pygame.MOUSEMOTION: 
    newrect.center = event.pos

在主应用程序循环中,您必须不断地

  • 处理事件
  • 清除显示
  • 分别绘制场景矩形
  • 更新显示

如果要控制每秒帧数,则可以将参数传递给^{}的方法^{},而不是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()

相关问题 更多 >