Поле-выделение в 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

