2016-05-04 3 views
2

Я делаю 2d игру сверху вниз, и у меня есть проблема, когда я увеличиваю/уменьшаю и изменяю разрешение.Pygame scale messing up sprite

game start

zoom out

zoom in

Вот код, который я использую, чтобы управлять изображением (спрайт):

char = pygame.image.load('char.png') 
char_size = 10 

def set_res(self,window_h): 
    self.w = int(window_h * 1.2)#4:3 
    self.h = int(window_h * 0.9)#4:3 
    self.mode = (self.w, self.h) 
    self.screen = pygame.display.set_mode(self.mode) 
    self.zoom() 

def zoom(self): 
    self.unit = self.h/self.board_units 
    self.char = pygame.transform.scale(self.char, (int(self.unit*self.char_size),int(self.unit*self.char_size))) 
. 
. 
. 
self.screen.fill(self.white) 
self.screen.blit(self.char, (self.w/2-self.char_size*self.unit/2, self.h/2-self.char_size*self.unit/2)) 
pygame.display.update() 

ответ

1

Эта линия:

self.screen.blit(self.char, (self.w/2- self.char_size*self.unit/self.h/2-self.char_size*self.unit/2)) 

, кажется, отсутствует запятая в кортеже между левой и верхней:

self.screen.blit(self.char, (self.w/2- self.char_size*self.unit, self.h/2-self.char_size*self.unit/2)) 

Кроме того, вы уже масштабируется полукокс, так что просто спросить char для rect его размера, сосредоточенных в центре экрана :

self.screen.blit(self.char, self.char.get_rect(center=(self.w/2, self.h/2))) 
0

Хорошо, поэтому я выяснил, что случилось. Мне нужно сохранить исходное загруженное изображение и использовать это изображение всякий раз, когда я хочу масштабировать свой спрайт, иначе, если у меня будет загруженное изображение 20x20 и масштабируйте его до 10x10, а затем до 100x100, это будет изображение 10x10, растянутое до 100x100.