Я реализую функцию в своей игре, где мой персонаж пригибается. Поэтому я хотел бы уменьшить высоту прямоугольника игрока.
Я пытался сделать это как с rect.inflate(0,y)
, так и с rect.h = new_height
.
Однако проблема, с которой я сталкиваюсь, заключается в том, что эти методы уменьшают высоту прямоугольника снизу. Как уменьшить высоту сверху?
class Player(pygame.sprite.Sprite):
def __init__(self, pos, groups):
super().__init__(groups)
self.ducking = False
self.image = pygame.image.load('Player/Player0.png').convert_alpha()
self.rect = self.image.get_rect(topleft = pos)
def duck(self):
if self.ducking: # This bool becomes True in another method
self.image = pygame.image.load('Player/Player_duck.png')).convert_alpha()
# Decrease rect height
self.rect.h = new_height
Как насчет уменьшения высоты и одновременного перемещения вверх на разницу?
Помимо вашего вопроса: вы не должны нагрузка изображение внутри функции, которая является частью игрового цикла. Изображение должно быть загружено в место в памяти (переменная, словарь, что угодно) перед запуском вашей сцены (для простых игр, как часть настройки, перед входом в цикл). То, что вы делаете, будет работать, но загрузка изображения имеет всевозможные накладные расходы, которые не должны проходить между кадрами.
Вы должны изменить вершину прямоугольника вместе с высотой - и рассчитать, насколько вершина должна быть перемещена, используя для этого разницу в высоте.
При программировании не будет вызова или атрибута для все, который вы хотите сделать, и обдумывание и создание стратегий для получения необходимых результатов является частью сделки:
# on game toplevel, or inside a proper setup/init function:
ducked_image = pygame.image.load('Player/Player_duck.png')).convert_alpha()
...
class Player(...):
...
def duck(self):
if self.ducking: # This bool becomes True in another method
self.image = ducked_image
new_height = ducked_image.get_rect().h
self.rect.top += self.rect.h - new_height
self.rect.h = new_height
Пожалуйста, поделитесь соответствующим кодом, чтобы мы могли воспроизвести его на наших собственных машинах и в справочном руководстве.