You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
4 months ago | |
|---|---|---|
| Entities | 4 months ago | |
| assets | 7 months ago | |
| conf | 7 months ago | |
| enne2engine | 4 months ago | |
| .gitignore | 7 months ago | |
| README.md | 7 months ago | |
| game_adv.py | 4 months ago | |
| game_rts.py | 4 months ago | |
| logo.jpg | 7 months ago | |
| requirements.txt | 4 months ago | |
README.md
Enne2Engine
Un semplice motore di gioco 2D isometrico sviluppato in Python con supporto per SDL2.
Caratteristiche
- Supporto per più backend grafici
- Sistema di rendering di sprite e tilesheet
- Gestione delle animazioni tramite file JSON
- Sistema di controllo utente e gestione eventi
- Trasformazioni di coordinate isometriche
- Sistema di selezione singola e multipla di entità
- Gestione degli asset semplificata
- Supporto per mappe basate su tile con ombreggiatura
- Pathfinding per le unità di gioco
Prerequisiti
- Python 3.7+
- SDL2 (per l'utilizzo del backend SDL2)
- Pyglet (per l'utilizzo del backend Pyglet)
Installazione
- Clona il repository:
git clone https://git.enne2.net/enne2/enne2engine
cd enne2engine
- Installa le dipendenze con Python 3.13
pip install -r requirements.txt
Utilizzo
Avvio della demo
Per avviare la demo con il backend SDL2:
python engine_demo.py
Sistema di Entità
L'engine supporta un sistema di entità per la creazione di unità di gioco:
from Entities.Units.marine import Marine
# Creazione di un'unità Marine
marine = Marine("knight", x=5, y=10, animation="idle", speed=1, health=100, game_engine=engine)
# Aggiunta dell'unità al gioco
game.entities.append(marine)
# Selezionare e muovere l'unità
marine.select_unit()
marine.set_target_cell((10, 8)) # L'unità inizierà a muoversi verso questo punto
Sistema Isometrico
Il motore supporta trasformazioni isometriche per la visualizzazione 2.5D:
# Trasformazione da coordinate di mappa a coordinate schermo
screen_x, screen_y = graphics.iso_transform(map_x, map_y)
# Trasformazione da coordinate schermo a coordinate di mappa
map_x, map_y = graphics.inv_iso_transform(screen_x, screen_y)
Gestione delle Mappe
Le mappe sono definite tramite file JSON:
[
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]
]
Dove ogni numero rappresenta un indice di tile nel tilesheet.
Creazione di un nuovo progetto
from enne2engine.sdl2_wrapper import SDL2Wrapper
from enne2engine.controls import UserControls
class MioGioco(UserControls):
def __init__(self):
super().__init__()
self.graphics = SDL2Wrapper(self)
# Inizializzazione delle risorse e della logica di gioco
self.load_assets()
def run(self):
running = True
while running:
event = self.graphics.handle_events()
if event == "QUIT":
running = False
self.graphics.clear_screen()
# Logica di rendering
self.graphics.present_renderer()
self.graphics.quit()
def load_assets(self):
# Caricamento delle risorse
self.graphics.load_tilesheet("tiles", "assets/tiles/my_tiles.png")
self.graphics.load_spritesheet("player", "assets/player/player_animations.json")
if __name__ == "__main__":
gioco = MioGioco()
gioco.run()
Struttura del Progetto
enne2engine/: Moduli principali del motoresdl2_wrapper.py: Wrapper per SDL2pyglet_wrapper.py: Wrapper per Pygletcontrols.py: Sistema di gestione degli input utente
assets/: Contiene gli asset di esempioKnightBasic/: Animazioni del cavaliere (Idle, Run, Walk, Die, Attack)tiles/: Tileset di esempiomaps/: Mappe di esempio in formato JSON
Entities/: Definizioni delle entità di giocoUnits/: Unità di gioco come Marines
engine_demo.py: Demo del motore
Formato delle Animazioni
Le animazioni sono definite in file JSON con il seguente formato:
{
"frames": [
{
"frame": {"x": 0, "y": 0, "w": 256, "h": 256},
"duration": 100
},
{
"frame": {"x": 256, "y": 0, "w": 256, "h": 256},
"duration": 100
}
],
"meta": {
"app": "https://pixelover.io",
"frameAnimations": [
{
"name": "Walk",
"fps": 10,
"from": 0,
"to": 10
}
],
"direction": 0
}
}
Rendering e Performance
Il motore include funzionalità per ottimizzare le performance:
- Rendering di background in texture separate
- Texture targeting per operazioni di disegno efficiente
- Conteggio FPS e regolazione del frame timing
Licenza
Questo progetto è rilasciato sotto la licenza MIT.
