I laid down the base work for this game, and was doing some tests, however I realized that nothing is updating on the pygame screen. I used some print functions to check and it looks like the lines are getting run to update the window. I'd appreciate any help in pointing out any error that I've made in my code causing this problem.
Main Code:
Main Code:
import pygame import sys from PygameFuncs import Button, message_display from functools import partial settings = { 'fps': 60, 'caption': "PyLine", } H = 800 W = 600 class StartScreen: def __init__(self, controller): self.colors = { 'background': (255, 255, 255), } self.objects = { Button(rect=[W*0.5-100, H*0.5-150, 200, 300], color=[0, 0, 255], hoverColor=[0, 0, 200], textsize=15, text="Start", textcolor=[0, 0, 0]): { 'scales': [0.5, 0.5, 1/3, 3/8], 'offsets': [-100, -150, 0, 0], 'finish_funcs': [], }, } def resize(self, screen): for obj, info in self.objects.items(): w = screen.get_width() h = screen.get_height() scales = info['scales'] offsets = info['offsets'] obj.resize([w*scales[0]+offsets[0], h*scales[1]+offsets[1], w*scales[2]+offsets[2], h*scales[3]+offsets[3]]) def draw(self, screen): screen.fill(self.colors['background']) for obj in self.objects.keys(): obj.draw(screen) def run(self, controller): for obj, info in self.objects.items(): obj.run(controller.screen, *info['finish_funcs']) class Controller: def __init__(self, settings, startingWindow): pygame.init() self.screen = pygame.display.set_mode((H, W), pygame.RESIZABLE) pygame.display.set_caption(settings['caption']) self.currentWindow = startingWindow self.running = False self.clock = pygame.time.Clock() self.settings = settings def new_window(self, window): self.running = False self.currentWindow = window self.run() def run(self): self.running = True self.currentWindow = self.currentWindow(self) while self.running: for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False break if event.type == pygame.VIDEORESIZE: self.screen = pygame.transform.scale(self.screen, (event.w, event.h)) self.currentWindow.resize(self.screen) self.currentWindow.draw(self.screen) self.currentWindow.run(self) pygame.display.update() self.clock.tick(self.settings['fps']) if __name__ == '__main__': app = Controller(settings, StartScreen) try: app.run() except KeyboardInterrupt: print("KeyboardInterrupt") pygame.quit() sys.exit() else: print("This file must be run directly for the game to display and work correctly.")Button Class:
class Button: def __init__(self, **kwargs): self.rect = pygame.Rect(kwargs.get('rect', [0, 0, 100, 100])) self.font = pygame.font.SysFont(kwargs.get('textfont', 'arial'), kwargs.get('textsize', 10)) self.color = kwargs.get('color', [255, 255, 255]) self.hoverColor = kwargs.get('hoverColor', [200, 200, 200]) self.textSurf, self.textRect = text_objects(kwargs.get("text", "Hello World"), self.font, kwargs.get('textcolor', [0, 0, 0])) self.textRect.center = ((self.rect[0] + self.rect[2]/2, self.rect[1] + self.rect[3]/2),) def resize(self, rect): self.rect = pygame.Rect(rect) def draw(self, screen, hover=False): color = self.color if hover: color = self.hoverColor pygame.draw.rect(screen, color, self.rect) screen.blit(self.textSurf, self.textRect) def run(self, screen, *args): mouse = pygame.mouse.get_pressed() if self.rect.collidepoint(pygame.mouse.get_pos()) and mouse[0]: self.draw(screen, True) for command in args: command() return True return False