Rect не будет обновлять позицию, когда спрайт взят из ходов - PullRequest
1 голос
/ 02 апреля 2020
player_rect = Pfront_n.get_rect()

Здесь Pfront_n - это спрайт, и я получаю прямоугольник для этого спрайта. Это за пределами основного l oop. Когда внутри основного l oop, print(player_rect) показывает, что когда мой игрок движется, прямоугольник не следует. Моя система движений игроков основана на скорости, если это имеет значение. Как сделать так, чтобы прямоугольник оставался вокруг игрока?

После этого у меня есть еще один похожий вопрос ...

for layer in room2:
        r_x = 0
        for tile in layer:  
            if tile == '2':
                bat_create()    
            if tile == '1':
                screen.blit(grass, (r_x*40, r_y*40))        
            if tile != '0':
                tile_rects.append(pygame.Rect)
            r_x += 1
        r_y += 1 

За пределами основного l oop, я создал прямоугольник для grass так же, как и для моего плеера. В методе, который я использую в приведенном выше коде, несколько grass блоков появляются в позициях, предварительно определенных массивом Как я могу получить ректы за каждый отдельный блок grass? Довольно нерелевантный Sidenote для контекста. Конечная цель - использовать прямоугольник моих игроков и прямоугольник grass, чтобы мой игрок останавливался при попадании в grass. Любая помощь по любому из этих вопросов будет отличной. Спасибо!

1 Ответ

1 голос
/ 02 апреля 2020

Класс Sprite не имеет метода get_rect. Вероятно, Pfront_n это Surface. Поверхность не имеет положения, нет, поверхность находится в положении blit в положении на другой поверхности. Координаты x и y, которые возвращаются get_rect(), равны (0, 0). Но вы можете установить позицию. Ключевым аргументам get_rect присваивается соответствующий виртуальный атрибут pygame.Rect. Например:
(player_x, player_y должна быть позиция игрока)

player_rect = Pfront_n.get_rect(topleft = (player_x, player_y)) 

Что должен делать tile_rects.append(pygame.Rect)? pygame.Rect это класс. Если вы хотите добавить pygame.Rect объект, который представляет плитку к tile_rects, тогда он должен быть:

tile_rects.append(pygame.Rect(r_x*40, r_y*40, 40, 40))
...