I am making a game with Pygame where there are going to be many different screens. I am making a class called Screen that will have custom screens made for you. I need each screen to have different events and triggers though, so I can't just define one function in the class. I need separate functions for each screen which would mean that I need to define functions out side of the class definition for each screen. I don't know if this is possible but it would be good to know. I have not gotten too far in yet but here is the code:
import pygame
class Screen:
def __init__(self, size, bg_color, bg_image):
self.size = size
self.bg_color = bg_color
self.bg_image = bg_image
self.layers = []
self.screen = pygame.display.set_mode(self.size)
# some code was taken out here to save space (it was just some x y width and height getters and setters)
def add_item(self, item, layer=None):
if layer is None:
self.layers.append(item)
else:
self.layers.insert(layer, item)
def remove_item(self, item):
self.layers.remove(item)
def draw(self):
self.screen.fill(self.bg_color)
self.screen.blit(self.bg_image)
for item in self.layers:
self.screen.blit(item, item.pos)
I need each screen to have different events and triggers though
So you are searching for Inheritance. Read about Inheritance and Polymorphism in Python
Use Screen
as a base class. Derive different classes from Screen
, where you can implement different behavior:
class Screen:
def __init__(self, size, bg_color, bg_image):
# [...]
# [...]
class Screen_1(Screen):
def __init__(self, size, bg_color, bg_image):
super().__init__(size, bg_color, bg_image)
def my_method():
# do something
# [...]
class Screen_2(Screen):
def __init__(self, size, bg_color, bg_image):
super().__init__(size, bg_color, bg_image)
def my_method():
# do something different
# [...]