在pygame中使用鼠标移动可缩放矩形

时间:2018-05-09 19:49:12

标签: python python-3.x pygame

我正在尝试在pygame中移动一个矩形,并使其可伸缩。

The scalable rectangle code is something like this然后我尝试添加这样的事件:

from pygame imports *
init()

rect1 = (rect1x, rect1y, 300,300)
rect1x = 0
rect1y = 0

while running: 
    x,y = mouse.get_pos()
        if rect1Pressed == True:
        rect1x = x
        rect1y = y
    for evnt in event.get():
            if evnt.type == QUIT:
                running = False
    if evnt.type == MOUSEBUTTONDOWN:
        if evnt.button == 1:
            if rect1.collidepoint(mouse.get_pos()):
                rect1Pressed == True

如何整合可缩放的矩形并使其能够随鼠标移动?这样窗口就会跟随鼠标移动。所以它有点像你的笔记本电脑,你可以缩放窗口并移动它。

1 个答案:

答案 0 :(得分:1)

您可以检查elif event.type == pg.MOUSEMOTION:块中按下了哪个鼠标按钮,例如if event.buttons[0]:,然后根据按钮移动或缩放矩形。要移动矩形,只需将event.rel添加到rect.xrect.y属性。

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
rect1 = pg.Rect(100, 100, 161, 100)
rect2 = pg.Rect(300, 200, 161, 100)
selected_rect = None

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.MOUSEBUTTONDOWN:
            for rect in (rect1, rect2):
                if rect.collidepoint(event.pos):
                    selected_rect = rect  # Select the colliding rect.
        elif event.type == pg.MOUSEBUTTONUP:
            selected_rect = None  # De-select the rect.
        elif event.type == pg.MOUSEMOTION:
            if selected_rect is not None:  # If a rect is selected.
                if event.buttons[0]:  # Left mouse button is down.
                    # Move the rect.
                    selected_rect.x += event.rel[0]
                    selected_rect.y += event.rel[1]
                else:  # Right or middle mouse button.
                    # Scale the rect.
                    selected_rect.w += event.rel[0]
                    selected_rect.h += event.rel[1]
                    selected_rect.w = max(selected_rect.w, 10)
                    selected_rect.h = max(selected_rect.h, 10)

    screen.fill((30, 30, 30))
    pg.draw.rect(screen, (0, 100, 250), rect1)
    pg.draw.rect(screen, (0, 200, 120), rect2)
    pg.display.flip()
    clock.tick(30)