J'ai quelques remarques :
- Pour chaque niveau d'un jeu , tu as les assets, les animations , etc... Pour des niveaux différents , dois tu te retapé les animations, le chargement des assets & cie ?
- J'aurais plus vu un Asset Manager global , qui stockes les assets à chargé.
- un système de scene , chaque scene représente un état ( un menu , le jeu , une présentation ) , une scene peu en appeler une autre ( voir game state manager sur google )
- cette scene est composé d'acteur, un acteur peu être un sprite , un sprite animé , un son , un emetteur de particule , etc... , chaque acteur selon sont type pointent vers des assets, qui sont chargé au lancement de la scene par exemple.
Code : Tout sélectionner
Structure Vector2f
x.f
y.f
EndStructure
Structure Actor
position.Vector2f
velocity.Vector2f
direction.Vector2f
angle.f
*func_update ; void update(this, deltaTime)
*func_render ; void draw(this, renderTarget)
EndStructure
Tout mes "composants" de scene dérive de Actor , une structure de base abstraite qui ne sera jamais utilisé directement.
Voici la structure la plus simpliste d'une scene , chaque scene contient des acteurs , à la manière d'un théâtre
Admettons que j'ai un acteur "Sprite" , je le représente dans le plus simple appareil ainsi :
tu peu lui ajouté tout les attributs qu'il te faut, là c'est un exemple :
Code : Tout sélectionner
Structure Sprite Extends Actor
assetID.l
name.s
EndStructure
Procedure UpdateSprite(*s.Sprite, deltatime.f)
Debug "update" + *s\name
EndProcedure
Procedure DrawSprite(*s.Sprite, output)
Debug "draw " + *s\name
EndProcedure
Chaque Acteur à ses propres procédure d'update & de Draw
Je le créer et je l'ajoute directement dans la scène qui m’intéresse comme ceci :
Code : Tout sélectionner
Procedure.i CreateGameSprite(*s.Scene, assetID.l)
*spr.Sprite = AllocateMemory(SizeOf(Sprite))
If *spr
*spr\assetID = assetID
*spr\name = "Sprite " +Str(*spr)
; bind fonction
;
*spr\func_update = @UpdateSprite()
*spr\func_render = @DrawSprite()
; créer ton sprite ici
AddElement(*s\actor())
*s\actor() = *spr
ProcedureReturn *spr
EndIf
EndProcedure
Comme Sprite Dérive de Actor via Extend , je n'oublie pas de "bindé" les fonctions de mise a jour et de rendu.
Je créer une scene bidon :
Code : Tout sélectionner
*maScene.Scene = AllocateMemory(SizeOf(Scene))
InitializeStructure(*maScene,Scene)
J'ajoute 2 acteurs
et dans ma boucle principale , j'ai juste à updaté ma scene & de même pour le rendu.
Voilà grosso modo , comment j'aurais fait. Faire ce que tu fait , c'est d'abord faire un moteur de jeu 2D complet , et ensuite collé une application ( front end ) devant

J’espère t'avoir aidé à trouvé des idées & à organisé ton code afin d'être plus productif ^^