Вопрос о системе координат Python для центрирования нарисованных объектов - PullRequest
1 голос
/ 30 октября 2019

Мы бы хотели создать прямоугольник с шириной w и высотой h на поверхности шириной a и высотой b.

Какими будут значения left, top, width, height, которые мы должны передать функции pygame.Rect, если прямоугольник должен находиться на расстоянии x_offset от левого края поверхности и центрироватьсявертикально на поверхности?

Я получил этот вопрос, и я знаю, что left будет равен x_offset, но я понятия не имею, как выяснить какие-либо другие, которые я пытался нарисовать.

Ответы [ 3 ]

2 голосов
/ 31 октября 2019

Просто сначала создайте объект Rect со значениями, которые вам известны:

rect = pygame.Rect(x_offset, 0, w, h)

и отцентрируйте прямоугольник, используя его атрибут centery:

rect.centery = the_other_surface.get_rect().centery
0 голосов
/ 31 октября 2019

Чтобы использовать все указанные переменные (вместо жесткого кодирования абсолютных размеров в программе), я бы использовал объект Rectangle pygame как для поверхности, так и для прямоугольника, который мы хотим нарисовать.

import pygame
from time import sleep
pygame.init()

# Declare our variables and initialize
a,b = 0,0 # Declare screen dimensions.
w,h = 0,0 # Declare rectangle dimensions.
x,y = 0,0 # Declare placement locations on screen surface.

# Now set specific values to our variables
a = 500 # Screen Width
b = 500 # Screen Height

# We could use any surface here (such as for a sprite), but let's use the screen.
screen = pygame.display.set_mode((a,b),32) # Create a screen surface of size a X b
screen.fill(pygame.Color("DARKBLUE"))      # Fill it with Dark Blue.
screen_rect = screen.get_rect()            # Create a rectangle object for the screen.

w = 200 # Make the rectangle 200 wide.
h = 100 # Make the rectangle 100 high.
rec = pygame.Rect((x,y,w,h)) # Create a rectangle object for our drawn rectangle.
# Rec holds all of the placement and size values for the rectangle we want to draw.
rec_color = (255,0,0) # Let's draw a red rectangle.

distance_x = 50 # Place the rectangle 50 pixels over from the left side of the screen.
rec.x = distance_x                # Set rec's x value equal to distance_x.
rec.centery = screen_rect.centery # Set rec's y value to center of the screen y-axis
# Pygame's Rectangle Object handles the calculations for us. NICE! 

pygame.draw.rect(screen,rec_color,rec,2) # Draw a rectangle on the screen using a line
                                         # that is 2-pixels wide. (Use 0 to fill.)
pygame.display.flip()                    # Show the screen.

print("\nrec =",rec,end="\n\n")          # Let's see rec's final values.
sleep(3)                                 # Sleep for 3 seconds.
exit()                                   # Quit
0 голосов
/ 30 октября 2019

Может помочь, если вы переименуете переменные в нечто читаемое. Например:

rect_width = w
rect_height = h

surface_width = a
surface_height = b

rect_width и rect_height будут шириной и высотой Rect. X_offset будет слева.

rect_left = x_offset

Чтобы отцентрировать его по вертикали, найдите вертикальный центр:

surface_center_v = surface_height / 2

Затем поместите прямоугольник туда.

rect_top = surface_center_v

Однако это только помещает верхний край прямоугольника, и мы хотим вертикальный центр. Поэтому отрегулируйте положение прямоугольника вверх на половину его высоты, чтобы выровнять вертикальный центр прямоугольника с вертикальным центром поверхности.

rect_top -= rect_height / 2

Теперь у вас есть все параметры rect_left, rect_top, rect_width и rect_height.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...