Поле-выделение в Pygame

Я пытался сделать поле-выделение для своей будущей игры в pygame. Однако в процессе создания я наткнулся с проблемой, что pygame так просто не может создать прямоугольник, точка отсчета которого (x, y) начинается с: верхнего-правого угла / нижнего правого угла / нижнего левого угла. Это очень мешает свободному движению мыши, которая создает такое поле.

Может быть вы можете посоветовать какие-нибудь ресурсы, решающие такую проблему?

Инициализация:

import pygame
pygame.init()

A = 600
B = 400
 
screen = pygame.display.set_mode((A, B))

FPS = 60
clock = pygame.time.Clock()

Anskle = False
the_first_pos = None

Основой код:

while True:

    x_mouse, y_mouse = pygame.mouse.get_pos()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

''' Если левая кнопка мыши нажата и в тоже время не отпущена(проверяет последний elif)'''

        elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            the_first_pos = pygame.mouse.get_pos()
            Anskle = True

        elif event.type == pygame.MOUSEMOTION:
            if Anskle:
                pos = event.pos
 
                width = pos[0] - the_first_pos[0]
                height = pos[1] - the_first_pos[1]

                pygame.draw.rect(screen, 'green', pygame.Rect(the_first_pos[0], the_first_pos[1], width, height))
                pygame.display.update()
                screen.fill('black')

        elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
            Anskle = False

Желаемый результат:

Полу выделение


Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import pygame


pygame.init()

A = 600
B = 400
screen = pygame.display.set_mode((A, B))
FPS = 60
clock = pygame.time.Clock()

Anskle = False
the_first_pos = None

while True:
    x_mouse, y_mouse = pygame.mouse.get_pos()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            the_first_pos = pygame.mouse.get_pos()
            Anskle = True
        elif event.type == pygame.MOUSEMOTION:
            if Anskle:
                pos = event.pos
                width = pos[0] - the_first_pos[0]
                height = pos[1] - the_first_pos[1]

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                x, y = the_first_pos[0], the_first_pos[1]
                w, h = width, height
                if w < 0:
                    w = -w
                    x = x - w
                if h < 0:
                    h = -h
                    y = y - h

                pygame.draw.rect(screen, 'green', 
                    pygame.Rect(x, y, w, h))                     # + x, y, w, h
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                pygame.display.update()
                screen.fill('black')

        elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
            Anskle = False            

введите сюда описание изображения

→ Ссылка