Programmazione Python > Videogame

Un framework di sviluppo su pygame :|

(1/4) > >>

Amati:
Salve ho visto che ci sono alcune soluzioni (pygsear).
Pero' avevo in mente, o meglio sto gia facendo, una serie di librerie per velocizzare lo sviluppo. Volevo sapere se qualcuno si e' trovato difronte a problematiche dove ha dovuto "pastrugghiare" un mo di tempo.
O cmq soluzioni che nn sembrano pulite da poter migliorare.
Es io mi sono trovato molto spesso a sbattere la testa su come dispatchare gli eventi, creare una maniera pulita di passare la gestione degli eventi ai rispettivi oggetti su cui si interagisce e qualcosa l'ho inventata :D
molto + facile gestire ora gli eventi su gui e oggetti del gioco.
tra nn molto linko il git dove e' il progetto, cmq questo 3d era rivolto a chi avuto a che fare con pygame e avrebbe sempre voluto qualche funzione veloce che nn c'e' e sarebbe servita :|
quindi postate le vostre idee che se sono fiche le metto nel framework, un po come fa quello del perl che chiede agli utilizzatori le funzioni che vorrebbero :D

Simosito:
Ottima idea!
Perché non marchi la discussione come importante per dare maggiore visibilità?

Amati:
Visto che parlavo degli eventi io li ho pensati cosi...

Una classe singleton gestisce la scena, con una lista di oggetti da renderizzare (che estendono un mio oggetto disegnabile) e una coda di eventi strutturati.
Una parentesi sugli oggetti da disegnare: la classe singleton lancia una draw globale, cioe' ciclando su tutti gli oggetti chiama su ognuno di essi il metodo draw, quindi ogni oggetto gestisce il suo disegno, alla fine fa il refresh della scena (ovviamente estendendo un mio oggetto esisono dei flag che fanno capire se un oggetto puo' essere disegna, spostato, ecc).
Tornando agli eventi.... quando un evento viene sollevato se nn e' evento speciale (EXIT, QUIT) passa ad una funzione proxy_event del singleton.
Questa funzione ciclando sulla lista degli oggetti da renderizzare individua l'oggetto + esposto su cui e' avvenuto l'evento (es. click destro), quindi incoda un evento formattato del tipo [Oggetto, TipoEvento (MouseRightDown), posizione, ed eventuali kwagrs] nella coda degli eventi. Ovviamente anche altri eventi (scaturiti da altri processi, tutto avviene in twisted :|) posso essere incodati dall'esterno attraverso un apposito metodo.
Successivamente la coda viene eseguita, quindi x ogni evento viene chiamato il
gettattr(Oggetto, TipoEvento)(posizione, **kwargs).
In questa maniera basta implementare in un oggetto il metodo "MouseRightDown", "MouseLeftUp", "MouseMove", ecc e magicamente viene eseguita quella cosa quando si clicca sull'oggetto :|
Quindi la cosa diventa semplice, se cliccando su un oggetto deve comparirne un'altro basta che nel metodo MouseRightDown attraverso il singleton faccio
addEvent([<oggetto da comparire>, 'Show', posizione, <parametri opzionali>]),
sucessivamente implemento in quell'oggetto il metodo Show e tutto e' fatto :| nn so se sono stato kiaro :|
Ovviamente la cosa puo' essere estesa anche ad eventi non legati al mouse...

"Non so se mi sono spiegata, come disse al vela" (cit. :D)

Charles_Stain:
Una specie di pattern Observer se non ho capito male ;)

Amati:
L'ho usato o visto solo una volta x un esame :P, era in java. Cmq si ora lo sto leggendo e sempra che il meccanismo sia grosso modo quello sisi.
Molto usato, leggo, in C#/MFC ecco xke' nn ci ho avuto molto a che fare :|. E anche usato molto dai javisti :P.

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa