Как установить координаты прямоугольника с помощью get_rect() или Rect()?

Вот пример, который работает: он загружает красную фигуру внизу моего экрана. Пока все хорошо, но я хочу загрузить фигуру в определенных координатах, таких как 700 (ось X) и 100 (ось Y).

import pygame


class Figure:

    def __init__(self, screen2):
        """Initialize the figure and set its starting position."""
        self.screen2 = screen2

        # Load the Red figure image and get its rect.
        self.redplayer = pygame.image.load('Images/redplayer.bmp')
        self.rectredplayer = self.redplayer.get_rect()
        self.screen2_rect = screen2.get_rect()

        # Start each new redplayer at the bottom center of the screen.
        self.rectredplayer.centerx = self.screen2_rect.centerx
        self.rectredplayer.bottom = self.screen2_rect.bottom

    def blitme(self):
        """Draw the red player figure at its current location."""
        self.screen2.blit(self.redplayer, self.rectredplayer)

2 ответа

Установите координаты верхнего слоя следующим образом:

self.rectredplayer.x = 700
self.rectredplayer.y = 100
# Or just:
self.rectredplayer.topleft = (700, 100)

Чтобы установить центр прямоугольника на нужные координаты:

self.rectredplayer.center = (700, 100)

Или используйте другие прямоугольные атрибуты:

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery

Вы также можете передать координаты непосредственно Surface.get_rect:

self.rectredplayer = self.redplayer.get_rect(topleft=(700, 100))

Я делаю то, что вы сказали, но я получаю сообщение об ошибке. Код:

      import pygame
pygame.init()

screen = pygame.display.set_mode((500, 500))
ball = pygame.image.load('imgs/ball.gif')

pygame.display.set_caption("Making a ball move")

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((0,0,0))
    ball_rect = ball.get_rect()
    #ball_rect.x = 250 
    #ball_rect.y = 250
    ball_rect.center = (250, 250)
    ball_rect.width = ball.get_width()
    ball_rect.height = ball.get_height()
    ball_rect.blit(ball, ball_rect)

    pygame.display.flip()

И ошибка:

      pygame 2.1.2 (SDL 2.0.18, Python 3.10.1)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "D:\Coding\Python\Pygame\Making a rect 
  move\making_a_rect_that_moves.py", line 22, in <module>
  ball_rect.blit(ball, ball_rect)
AttributeError: 'pygame.Rect' object has no attribute 'blit'
[Finished in 676ms]

Неважно, я понял, что я делал неправильно

Другие вопросы по тегам