Вы можете исследовать этот способ, вызывая метод display.set_mode
из pygame , как в конструкторе класса Screen
(l. 165 в game.py из предоставленного вами пакета)
games.init(screen_width = 500, screen_height=100, fps = 50)
#[...] level stuffs...
games.screen._width = 100 # this setup the width property directly in the screen
games.screen._height = 500 # this setup the height property
games.screen._display = pygame.display.set_mode((100, 500)) # this update the display
Один из недостатков этого решения заключается в том, что если вы сохраните некоторые живые спрайты во время смены экрана, они не будут корректно обновлять метод стирания во время отображения, и это может оставить некоторые строки во время рисования.,Чтобы избежать этого, вы можете вызвать games.screen.clear()
или, если вам нужна выборочная очистка, вы можете использовать переопределенный класс Sprite
, который может обработать правильный метод, вызвав screen.blit_and_dirty
.
class MySprite(games.Sprite):
def __init__(self, screen, *args, **kwargs):
self.screen = screen
super().__init__(*args, **kwargs)
def _erase(self):
"""
This method overrides the class method by using blit_and_dirty instead of blit_background
"""
self.screen.blit_and_dirty(self.screen._background, self._rect)
.этот класс, вам просто нужно наследовать от него и добавить параметр экрана:
class Ball(MySprite):
def __init__(self, screen):
super().__init__(screen, games.load_image('ball.png'), x=40, y=40, dx=2, dy=2)
def update(self):
if self.left<=0 or self.right>=self.screen.get_width():
self.dx*=-1
if self.top<=0 or self.bottom>=self.screen.get_height():
self.dy*=-1
И вы можете объявить экземпляр, как показано ниже:
games.init(screen_width = 500, screen_height=100, fps = 50)
games.screen.add(Ball(games.screen) )
...