[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 29/02/2016 18:36 | #
Très bien, je suis tes tutos
Citer : Posté le 29/02/2016 18:53 | #
Merci Sortie du prochain 10 min.
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 29/02/2016 18:57 | #
génial tu sort enfin des tuto !!!!!!!!!
oui ça se voit je suis heureux
Citer : Posté le 29/02/2016 18:59 | #
Yep, maintenant que le 2 ème trimestre est fini, je peu faire beaucoup plus de chose. Le 3 ème tuto fut écrit en devoir d'histoire car je m'ennuyait 8) .
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 29/02/2016 19:00 | #
l'histoire justifie les moyens
Citer : Posté le 01/03/2016 15:36 | #
Ah oui, c'est vrai que le troisième trimestre sert à rien Je suis aussi tes tutoriels, j'essayerai de sortir un jeu quand je pourrais, voir si c'est plus pratique que de coder normalement
Citer : Posté le 01/03/2016 20:10 | #
Est-ce que tu peux renommer tes tutos [C-engine] tout court ? Là ça fait vraiment lourd…
Citer : Posté le 01/03/2016 20:11 | #
Ok
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 01/03/2016 20:14 | #
Merci
Citer : Posté le 09/04/2016 16:10 | #
je suis en train de tester le c-engine et apres avoir respecter tte les etape le built result me met une erreur car le code renvoie 1
comment coriger ca et pourquoi ca le fait?
Citer : Posté le 09/04/2016 16:18 | #
Soit plus précis sur l'erreur que tu a eu pls.
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 09/04/2016 16:19 | #
le sdk donne ca:
ERROR: Process failed with return code: 1
Build was not successful.
Citer : Posté le 09/04/2016 16:23 | #
Il doit y avoir autre chose d'écrit au dessus.
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 09/04/2016 16:24 | #
Executing Hitachi SH C/C++ Compiler/Assembler phase
set SHC_INC=C:\Program Files\CASIO\fx-9860G SDK\OS\SH\include
set PATH=C:\Program Files\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_LIB=C:\Program Files\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_TMP=C:\Users\dell\Desktop\projet c-engine\essai\Debug
"C:\Program Files\CASIO\fx-9860G SDK\OS\SH\bin\shc.exe" -subcommand=C:\Users\dell\AppData\Local\Temp\hmk67AE.tmp
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(17) : C5020 (E) Identifier "SetXY" is undefined
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(17) : C5053 (E) Expected a ":"
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(18) : C5020 (E) Identifier "SetRender" is undefined
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(18) : C5053 (E) Expected a ":"
HMAKE MAKE UTILITY Ver. 1.1
Copyright (C) Hitachi Micro Systems Europe Ltd. 1998
Copyright (C) Hitachi Ltd. 1998
ERROR: Process failed with return code: 1
Build was not successful.
Citer : Posté le 09/04/2016 16:25 | #
Citer : Posté le 09/04/2016 16:26 | #
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(17) : C5020 (E) Identifier "SetXY" is undefined
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(17) : C5053 (E) Expected a ":"
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(18) : C5020 (E) Identifier "SetRender" is undefined
C:\Users\dell\Desktop\projet c-engine\essai\essai.cpp(18) : C5053 (E) Expected a ":"
Voici tes erreurs, Suruq x) (sans le code source, on pourra difficilement t'aider plus)
EDIT: Well, les flèches ont été transformées en → lignes 17 et 18 dans le code source de test. Il faut les remplacer par un tiret suivi du signe supérieur : "- >", sans l'espace.
Mon blog ⋅ Mes autres projets
Citer : Posté le 09/04/2016 17:06 | #
eentbout à boutéer un objet est très facileJ'ai plus la force de continuer
Citer : Posté le 19/04/2016 13:50 | #
Heu... Où ajoute-t-on le code ? (je suis un putain de noob)
Ajouté le 19/04/2016 à 14:28 :
Sprite S_Perso_2( I_Perso_2 , 16 , 16 );
Sprite S_Perso[]={ S_Perso_1 , S_Perso_2 };
Animation A_Perso( S_Perso , 2 , 200 );
Object * Perso = new Object;
Perso->GetTransform()->SetXY(20,11);
Perso->GetRender()->SetRender(A_Perso);
-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 19/04/2016 14:33 | # | Fichier joint
voilà le fichier
-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 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...