#python #pygame
#python #pygame
Вопрос:
У меня есть спрайты, бегающие по симулятору.
class guys(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("/Users/taiji/Desktop/Sim/images/guys.png")
self.original_image = self.image
self.surf = pygame.Surface((50, 30))
pos = (random.uniform(0,SCREEN_WIDTH), random.uniform(0,300))
self.rect = self.surf.get_rect(center = pos)
Я хотел бы уменьшить их размер с (50, 30) до (5, 3). Позже я заставлю их расти на основе энергии, поэтому я изменю это (5, 3) на что-то другое, но сейчас я просто пытаюсь разобраться с основами. Я попробовал это:
def grow(sprites):
for entity in sprites:
pygame.transform.scale(entity.surf, (5, 3))
Но они вообще не изменились. Может кто-нибудь помочь мне с этим? Нужно ли мне что-либо делать с entity.rect, чтобы столкновения все еще были в порядке?
Спасибо за помощь!
Ответ №1:
Это происходит потому pygame.transform.scale()
, что не работает на месте. Это можно решить, назначив поверхность для вывода функции, например:
entity.surf = pygame.transform.scale(entity.surf, (5, 3))
В качестве примечания, этот метод считается разрушительным, и, следовательно, масштабирование, скорее всего, приведет к тому, что спрайты станут неузнаваемыми. Один из способов решить эту проблему — сохранить исходный спрайт (как, кажется, вы уже сделали self.original_image
) и просто установить для нового спрайта масштабированную версию этого оригинала.
Комментарии:
1. Я не уверен, что понимаю это, извините (хотя спасибо за помощь!) Я изменил код на это: « def grow(sprites): для сущности в спрайтах: entity.surf = pygame.transform.scale(entity.surf, (5, 3)) ` И я убедился, что он вызывается в группе, но они все того же размера. Я что-то не так понял?
2. @taijifajin Вы впоследствии перерисовываете масштабированные поверхности?
3. @taijifajin Спрайт PyGame всегда будет отображаться
sprite.image
, поэтому измените все вхожденияsprite.surf
наsprite.image
.4. @bbnumber2 У меня draw является последней функцией в основном коде игры.
5. @Kingsley Я только что попробовал это, иногда они возвращаются к нормальному размеру, но в остальном они маленькие. Вы знаете, как остановить мерцание? Является ли их размер прямоугольника новым, меньшим размером или мне нужно что-то с этим делать?