pytanie dotyczące event handlera i update funkcji.
Witam, dawno już nie prograłowałem gier ale ostanio wróciłem, ostatnio się dowiedziałem, że warto np w taki sposób pisać gry:
What stays in handle_event():
✅ Pause (ESC) - needs immediate response
✅ Game over input (R, ESC) - needs immediate response
✅ Upgrade menu - has its own event handler
What moves to update():
✅ Dash (Spacebar)
✅ Bomb (Right click)
✅ Debug toggle (F3)
wcześniej klikanie, oraz eventy myszy mialem w event_handlerze, zastanawiam się czy to dobre podejście do tego:
po refaktoringu moja funkcja event_haandler wyglada tak i wywołuje sie przed update:
def handle_event(self, event):
"""Handle game events"""
# ✅ Pause toggle (keep in event loop for immediate response)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
if not self.game_over and not self.upgrade_menu.active:
self.paused = not self.paused
logger.info(f"Game {'paused' if self.paused else 'resumed'}")
return
# Handle game over input
if self.game_over:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_r:
self.restart()
return
elif event.key == pygame.K_ESCAPE:
self.running = False
return
# Handle upgrade menu input
if self.upgrade_menu.active:
selected_index = self.upgrade_menu.handle_input(event)
if selected_index is not None:
self._apply_upgrade(selected_index)
return
poniżej początek funkcji update:
def update(self, dt):
"""Update game state"""
if self.paused or self.game_over:
return
self.game_time += dt
# ✅ UPDATE INPUT FIRST
self.input_handler.update(self.camera.offset)
# ✅ Get input from handler
self.mouse_screen_pos = self.input_handler.get_mouse_screen_pos()
self.mouse_world_pos = self.input_handler.get_mouse_world_pos()
dx, dy = self.input_handler.get_movement_vector()
# ✅ HANDLE ACTIONS (before player update)
# Dash action
if self.input_handler.dash_pressed():
self.player.try_dash(dx, dy)
# Bomb action
if self.input_handler.bomb_pressed():
self.player.place_bomb(self.bombs)
Jakiś ekspert może się wypowiedzieć ? czy to po prostu nie ma znaczenia bo to i tak po sobie tak na prawdę występuje ponieważ główna funkcja wygląda tak :
while game.running:
dt = clock.tick(WindowConfig.FPS) / 1000.0
# Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
game.running = False
game.handle_event(event)
# Update game state
game.update(dt)
wiem, że to nie c lub c++ ale to mi chodzi bardziej o ogólne podejście do tematu nie zależnie od języka programowania:)
Pozdrawiam