Как уменьшить высоту прямоугольника сверху?

Я реализую функцию в своей игре, где мой персонаж пригибается. Поэтому я хотел бы уменьшить высоту прямоугольника игрока.

Я пытался сделать это как с 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

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

JNevill 16.03.2022 15:34

Как насчет уменьшения высоты и одновременного перемещения вверх на разницу?

matszwecja 16.03.2022 15:59

Помимо вашего вопроса: вы не должны нагрузка изображение внутри функции, которая является частью игрового цикла. Изображение должно быть загружено в место в памяти (переменная, словарь, что угодно) перед запуском вашей сцены (для простых игр, как часть настройки, перед входом в цикл). То, что вы делаете, будет работать, но загрузка изображения имеет всевозможные накладные расходы, которые не должны проходить между кадрами.

jsbueno 16.03.2022 16:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

При программировании не будет вызова или атрибута для все, который вы хотите сделать, и обдумывание и создание стратегий для получения необходимых результатов является частью сделки:

# 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

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