Модуль spriteProGame.py предоставляет базовый класс для всех игр на базе SpritePro.
SpriteProGame — это главный класс движка, который:
- Управляет игровым циклом
- Обрабатывает события
- Управляет сценами
- Предоставляет доступ к графике и вводу
from spritePro.spriteProGame import SpriteProGame
class MyGame(SpriteProGame):
def __init__(self):
super().__init__(
title="Моя Игра",
width=800,
height=600
)
def on_ready(self):
print("Игра готова!")
game = MyGame()
game.run()┌─────────────┐
│ __init__ │ Инициализация
└──────┬──────┘
│
▼
┌─────────────┐
│ on_ready │ Подготовка
└──────┬──────┘
│
▼
┌─────────────┐
│ Game Loop │ Игровой цикл
│ ├─ on_update│
│ ├─ on_draw │
│ └─ on_events│
└──────┬──────┘
│
▼
┌─────────────┐
│ on_exit │ Завершение
└─────────────┘
Запуск игрового цикла.
game.run()Остановка игрового цикла.
def on_key_down(self, key):
if key == pygame.K_ESCAPE:
self.stop()Приостановка игры.
self.paused = True
self.pause()Возобновление игры.
self.paused = False
self.resume()Вызывается один раз при запуске игры.
def on_ready(self):
self.load_assets()
self.setup_scenes()Вызывается каждый кадр для обновления логики.
def on_update(self, dt):
self.player.update(dt)
self.update_enemies(dt)Вызывается каждый кадр для отрисовки.
def on_draw(self):
self.screen.fill((0, 0, 0))
self.level.draw(self.screen)
self.player.draw(self.screen)Обработка отдельного события.
def on_event(self, event):
if event.type == pygame.QUIT:
self.stop()Вызывается при выходе из игры.
def on_exit(self):
self.save_game()
self.cleanup_assets()Переключение на новую сцену.
def on_key_down(self, key):
if key == pygame.K_SPACE:
self.set_scene(GameScene())Добавление сцены поверх текущей.
self.push_scene(PauseScene())Возврат к предыдущей сцене.
self.pop_scene()| Свойство | Тип | Описание |
|---|---|---|
screen |
Surface | Основная поверхность для отрисовки |
width |
int | Ширина окна |
height |
int | Высота окна |
fps |
int | Текущий FPS |
is_running |
bool | Игра запущена |
is_paused |
bool | Игра приостановлена |
delta_time |
float | Время между кадрами |
def on_ready(self):
self.camera = self.get_camera()
self.input = self.get_input()
self.audio = self.get_audio()
self.resources = self.get_resources()from spritePro.spriteProGame import SpriteProGame
from spritePro import Sprite, Scene
import pygame
class Player:
def __init__(self, x, y):
self.sprite = Sprite("player.png")
self.sprite.set_position(x, y)
self.speed = 200
def update(self, dt):
keys = pygame.key.get_pressed()
dx = (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * self.speed * dt
dy = (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * self.speed * dt
self.sprite.set_position(
self.sprite.x + dx,
self.sprite.y + dy
)
def draw(self, surface):
self.sprite.draw(surface)
class GameScene(Scene):
def on_enter(self):
self.player = Player(400, 300)
self.background = Sprite("background.png")
def on_draw(self, surface):
self.background.draw(surface)
self.player.draw(surface)
class MyGame(SpriteProGame):
def __init__(self):
super().__init__("Моя Игра", 800, 600)
def on_ready(self):
self.set_scene(GameScene())
def on_draw(self):
self.screen.fill((50, 50, 100))
super().on_draw()
if __name__ == "__main__":
game = MyGame()
game.run()game = SpriteProGame(
title="Игра",
width=800,
height=600,
fps=60,
fullscreen=False,
vsync=True
)class ExtendedGame(SpriteProGame):
def __init__(self):
super().__init__()
self.score = 0
self.lives = 3
def add_score(self, points):
self.score += points
def lose_life(self):
self.lives -= 1
if self.lives <= 0:
self.game_over()
def game_over(self):
print(f"Игра окончена! Счёт: {self.score}")
self.stop()