[C-Engine] n°2 : Création d'un personnage
Posté le 29/02/2016 17:54
Si vous avez loupé le premier tutoriel sur l'installation c'est
- ici -
Maintenant que vous avez installé le moteur de jeu, nous allons pouvoir créer notre premier jeu.
Oui je sais... un petit peu de patience... on y arrive
Etape 1 : Définition d'une animation
Qu'est qu'un animation ? Que ceux qui connaissent la réponse lèvent la main. Oui Jean-Mich... effectivement c'est exact.
Une animation est un ensemble de sprite mis bout à bout pour créer une impression de mouvement.
Un sprite se caractérise par une image et sa taille.
Aujourd'hui nous créerons notre tout premier personnage.
Pour cela je vous donne le code de l'image que nous allons utiliser:
const unsigned char I_Perso_1[]={0x1f, 0x8f, 0x20, 0x6f, 0x40, 0x3f, 0x72, 0xef, 0x9a, 0x1f, 0x99, 0x1f, 0x63, 0xef, 0x30, 0x4f, 0x4c, 0x8f, 0x86, 0x4f, 0x87, 0xcf, 0x46, 0xcf, 0x41, 0xcf, 0x20, 0x8f, 0x1f, 0xf, };
const unsigned char I_Perso_2[]={0x7, 0xce, 0x8, 0x31, 0x10, 0x9, 0x1c, 0xba, 0x26, 0x86, 0x26, 0x46, 0x18, 0xfc, 0x1c, 0x4, 0x22, 0x28, 0x71, 0x1e, 0x89, 0x69, 0x8b, 0xf1, 0x7f, 0xf2, 0x8f, 0xf2, 0x9f, 0x8c, 0x6e, 0x0, };
Ce code a été généré avec le Sprite Coder à partir de cette image.
Etape 2 : L'Animation.
Dans le C-Engine, animer un objet est très facile.
Pour commencer, copiez le code des images ( qui se trouve au dessus ) dans le code avant la ligne Engine Game;
Ensuite, nous allons définir la taille des 2 images pour créer des sprites en écrivant ceci:
Sprite S_Perso_1( I_Perso_1 , 12 , 15 );
Sprite S_Perso_2( I_Perso_2 , 16 , 16 );
Sprite S_Perso[]={ S_Perso_1 , S_Perso_2 };
Avec ce code, nous avons créé deux sprites que nous avons assemblés dans un tableau.
Puis, pour créer une animation il faut écrire.
Animation A_Perso( S_Perso , 2 , 200 );
Le constructeur d'animation nécessite:
- soit l'adresse d'un sprite
- soit un pointeur vers un tableau de sprites , le nombre de sprite du tableau et le temps entre l'affichage de 2 sprites en ms.
S_Perso est ici le pointeur vers le tableau de sprites.
2 est le nombre de sprite du tableau.
200 est le temps défini en ms.
Etape 3: L'objet
Maintenant que nous avons les images, nous pouvons créer l'objet joueur.
Petite définition:
Un objet est un ensemble de pointeur vers des composants, les composants de base sont un "Transforms" pour positionner sur l'écran l'objet et un "Render" pour afficher l'objet à l'écran.
Nous reviendront plus tard sur les différents composants qui existent dans le C-Engine.
Pour créer un objet il suffit d'écrire.
Object * Perso = new Object; // Ici nous déclarons l'objet "Perso" , comme nous déclarons une variable.
Ensuite pour positionner l’objet et lui affecter les images, il faut utiliser la fonction du Transforms "SetXY()" et la fonction du Render "SetRender()" .
Perso->GetTransforms()[b]->[/b]SetXY( 20 , [maroon]11[/maroon] ); [green]// Environ au milieu de l'écran , en x puis en y.[/green]
Perso->GetRender()[b]->[/b]SetRender( A_Perso ); [green]// A_Perso étant l[gray]'animation que l'[/gray]on veut assigner.[/green]
Vous pouvez compiler, puis lancer l' addin.
Et vous ne voyer rien.
C'est normal, nous n'avons pas demander au moteur "Game" de prendre en compte dans ses calculs l'objet "Perso".
Pour ce faire, après avoir déclaré le moteur de jeu avec Engine Game et avant de lancer le jeu avec Game.Game(). Ecrivez la ligne suivant :
Game.AddObject( Perso);
Compilez, et enfin, le perso est affiché à l'écran.
Voici le code que vous devriez avoir.
Voici le code que vous devriez avoir.
[brown]#include [gray]"..\C-Engine\CHeader.hpp"[/gray][/brown]
[purple]int[/purple] Jeu()
{
const [purple]unsigned char[/purple] I_Perso_1[]={[maroon]0[/maroon]x1f, [maroon]0[/maroon]x8f, [maroon]0[/maroon]x20, [maroon]0[/maroon]x6f, [maroon]0[/maroon]x40, [maroon]0[/maroon]x3f, [maroon]0[/maroon]x72, [maroon]0[/maroon]xef, [maroon]0[/maroon]x9a, [maroon]0[/maroon]x1f, [maroon]0[/maroon]x99, [maroon]0[/maroon]x1f, [maroon]0[/maroon]x63, [maroon]0[/maroon]xef, [maroon]0[/maroon]x30, [maroon]0[/maroon]x4f, [maroon]0[/maroon]x4c, [maroon]0[/maroon]x8f, [maroon]0[/maroon]x86, [maroon]0[/maroon]x4f, [maroon]0[/maroon]x87, [maroon]0[/maroon]xcf, [maroon]0[/maroon]x46, [maroon]0[/maroon]xcf, [maroon]0[/maroon]x41, [maroon]0[/maroon]xcf, [maroon]0[/maroon]x20, [maroon]0[/maroon]x8f, [maroon]0[/maroon]x1f, [maroon]0[/maroon]xf, };
const [purple]unsigned char[/purple] I_Perso_2[]={[maroon]0[/maroon]x7, [maroon]0[/maroon]xce, [maroon]0[/maroon]x8, [maroon]0[/maroon]x31, [maroon]0[/maroon]x10, [maroon]0[/maroon]x9, [maroon]0[/maroon]x1c, [maroon]0[/maroon]xba, [maroon]0[/maroon]x26, [maroon]0[/maroon]x86, [maroon]0[/maroon]x26, [maroon]0[/maroon]x46, [maroon]0[/maroon]x18, [maroon]0[/maroon]xfc, [maroon]0[/maroon]x1c, [maroon]0[/maroon]x4, [maroon]0[/maroon]x22, [maroon]0[/maroon]x28, [maroon]0[/maroon]x71, [maroon]0[/maroon]x1e, [maroon]0[/maroon]x89, [maroon]0[/maroon]x69, [maroon]0[/maroon]x8b, [maroon]0[/maroon]xf1, [maroon]0[/maroon]x7f, [maroon]0[/maroon]xf2, [maroon]0[/maroon]x8f, [maroon]0[/maroon]xf2, [maroon]0[/maroon]x9f, [maroon]0[/maroon]x8c, [maroon]0[/maroon]x6e, [maroon]0[/maroon]x0, };
Sprite S_Perso_1( I_Perso_1 , [maroon]12[/maroon] , [maroon]15[/maroon] );
Sprite S_Perso_2( I_Perso_2 , [maroon]16[/maroon] , [maroon]16[/maroon] );
Sprite S_Perso[]={ S_Perso_1 , S_Perso_2 };
Animation A_Perso( S_Perso , [maroon]2[/maroon] , [maroon]200[/maroon] );
Object Perso;
Perso.GetTransforms()[b]->[/b]SetXY( 50 , [maroon]25[/maroon] );
Perso.GetRender()[b]->[/b]SetRender( A_Perso );
Engine Game;
Game.AddObject( &Perso);
Game.Game();
[b][blue]return[/blue][/b] 1;
}
extern [gray]"C"[/gray]
{
[purple]int[/purple] AddIn_main(int isAppli, unsigned short OptionNum)
{
Jeu();
[b][blue]return[/blue][/b] 1;
}
[brown]#pragma section _BR_Size[/brown]
unsigned long BR_Size;
[brown]#pragma section[/brown]
[brown]#pragma section _TOP[/brown]
[purple]int[/purple] InitializeSystem(int isAppli, unsigned short OptionNum)
{
[b][blue]return[/blue][/b] INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
[brown]#pragma section[/brown]
}
Fichier joint
Citer : Posté le 19/04/2016 14:35 | #
Non mais tu peux pas mettre du code dans le vide, il faut le mettre dans une fonction et appeler cette fonction depuis AddIn_main() !
Sérieux...
Citer : Posté le 19/04/2016 14:36 | #
Ce code doit être placé dans la fonction Jeu();
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 19/04/2016 14:36 | #
aahhhh !!! OK !!! Merci
-Helmet : Traverse la cour sans te faire assommer par les objets !
-Octopus : Ramasse les ressources et ramène-les dans le bateau sans te faire dévorer par la pieuvre !
Citer : Posté le 08/05/2016 18:58 | #
c'est bon j'ai enfin pu tester ton C-engine et j'ai réussi l’étape 1 et 2 avec tes tutoriels vidéo, c'est plutôt fun
Citer : Posté le 08/05/2016 22:42 | #
Merci
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".