Posté le 05/11/2018 21:16
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 90 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 13/11/2018 20:11 | #
As-tu essayé de faire un quadrillage en damier pour le cercle noir, plutôt que de le remplir entièrement de noir ? Comme la couleur originale est plus claire, ça pourrait être plus fidèle.
Citer : Posté le 13/11/2018 20:34 | #
oh pas mal comme idée d'amélioration j'y avais pas pensé je vais revoir toute la partie map parce qu'elle ne met plais pas d'ailleurs x) c'est simple de faire ça donc autant que ce sois bien fais
Le plus dur reste à venir je pense, la boite de dialogue, l'affichage du texte dedans + l'interface de combat avec toute les caractéristique qu'elle peut comporter, telle que les attaques des différents ennemi, la collision pour les dégâts, l'attaque du joueur.. etc
Plutôt compliqué je doute de moi d'ailleurs pour tout ça parce que je n'ai qu'une vague idée de comment je vais faire
Citer : Posté le 13/11/2018 20:40 | #
Si tu as un doute, n'hésite pas à coder quelque chose d'un peu crade puis à demander comment l'améliorer : ce sera pour toi une bonne façon d'apprendre et ça t'évitera de partir avec des choses trop sales (qui te gêneront plus tard dans le développement).
Citer : Posté le 13/11/2018 21:00 | #
ok très bien je vais m'en sortir comme je peux et si j'ai un gros blocage je demanderais de l'aide je vais surement pas coder tout ça dans les règles de l'art mais oui je vais apprendre au fur et à mesure
Ajouté le 14/11/2018 à 14:23 :
L'avancement du projet est indiqué et sera modifié dans le Topic pour l'instant plus tard ça le sera dans le jeu posté
Citer : Posté le 14/11/2018 19:50 | #
Si tu as un doute, n'hésite pas à coder quelque chose d'un peu crade puis à demander comment l'améliorer : ce sera pour toi une bonne façon d'apprendre et ça t'évitera de partir avec des choses trop sales (qui te gêneront plus tard dans le développement).
Ouaip, et n'hésite pas à poser des questions, même spécifiques, sur comment faire ceci ou cela. La communauté saura te donner des pistes !
Citer : Posté le 14/11/2018 23:00 | #
Si tu as un doute, n'hésite pas à coder quelque chose d'un peu crade puis à demander comment l'améliorer : ce sera pour toi une bonne façon d'apprendre et ça t'évitera de partir avec des choses trop sales (qui te gêneront plus tard dans le développement).
Ouaip, et n'hésite pas à poser des questions, même spécifiques, sur comment faire ceci ou cela. La communauté saura te donner des pistes !
Oui et d'ailleurs j'en profite c'est pas tout le temps qu'on a le droit d'avoir ça avec des réponses aussi précise Le faite que ce sois une communauté restreinte permet d'être focalisé sur les quelques poste qui sort et moi je trouve ça génial, c'est aussi pour cette raison que j'ai décidé de m'investir dans tout ça parce que j'ai trouvé ça cool et j'avais envie de commencer la programmation sur calculatrice sérieusement donc voilà je me suis lancé
Ajouté le 15/11/2018 à 01:36 :
__________________________________________________________________________________________________
Je cherche à faire une boite de dialogue, mais je ne sais pas quel technique adopter et par ou commencer
Si je crée un sprite d'une boite de dialogue pour afficher du texte dedans, à cause de l'Alpha de la boite je ne pourrais pas ou alors on peut s'y prendre d'une autre manière pour afficher ça ?
Je voudrais juste des conseils avant de m'engager dans quelque chose qui n'aboutie pas ce qui est déjà le cas en fait, c'est plutôt ne pas aboutir encore une fois
Citer : Posté le 15/11/2018 06:54 | #
Tu peux, en fait ! As-tu remarqué que les pixels blancs à l'intérieur de ton sprite ne sont pas transparents ?
La technique du masque alpha permet de rentre transparents les pixels de ton choix, ceux qui sont à la fois noirs sur le masque et blancs sur l'image. Tu peux donc parfaitement réaliser ta boîte de dialogue !
Citer : Posté le 15/11/2018 10:36 | #
très bien je vais essayer de faire ça ça
Citer : Posté le 17/11/2018 19:56 | # | Fichier joint
J'ai un petit problème, encore avec l'alpha de la boite de dialogue x) ça va peut être être une question bête mais bon :
ML_bmp_or(Dialogue , 10 , 30, 106 , 29);
ça donne :
Les sprites se complète bien mais ça n'efface pas ce qu'il y a dessus >< un idée de pourquoi ?
Citer : Posté le 17/11/2018 20:21 | #
C'est que dans Dialogue_Alpha, le milieu de la boîte devrait être blanc.
Citer : Posté le 17/11/2018 20:49 | #
Je l'ai fais mais toujours pas
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40
,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0};
const unsigned char Dialogue_Alpha[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
Si je suis ce que tu as dis les sprites devrais être bon
ML_bmp_or(Dialogue , 10 , 30, 106 , 29);
Je n'ai pas changé le code, toujours le même résultat après le changement de sprite
Citer : Posté le 17/11/2018 21:06 | #
Ce que tu as fait sur la boîte de dialogue est valide, es-tu sûr que tu ne redessines pas la map par-dessus ensuite ?
Citer : Posté le 17/11/2018 21:39 | #
ah ça je ne sais pas j'utilise le C engine et niveau map j'ai juste suivi le tutoriel, mais ça vient peut être de là oui
Sur le fichier intégré du C engine, dans sprite.cpp là ou tu m'avais indiqué comment afficher le personnage avec l'alpha j'ai trouvé ça :
{
switch(d)
{
case 90: if(size_y % 2 == 0)y -=1; break;
case 180: if(size_y % 2 == 0)y -=1; if(size_x % 2 == 0)x -=1; break;
case 270: if(size_x % 2 == 0)x -=1; break;
}
if(Beta != NULL)
{
if(Alpha != NULL)
{
ML_bmp_or_rotate((const unsigned char*) this->Alpha, x + b_x, y + b_y, this->size_x , this->size_y , d); // Affichage du canal alpha
ML_bmp_and_rotate((const unsigned char*) this->Beta, x +b_x, y +b_y, this->size_x , this->size_y ,d); // Affichage du sprite en entier
}
else
{
ML_bmp_or_rotate((const unsigned char*) this->Beta, x +b_x , y +b_y, this->size_x , this->size_y , d); // Affichage du sprite en entier
}
}
}
C'est peut être ma solution au problème mais n'arrive pas à déchiffrer " int d" et si ça peut vraiment afficher le sprite que l'on souhaite.
Citer : Posté le 17/11/2018 21:42 | #
Non, c'est juste un paramètre de rotation. Je suppose que tu as fait quelque chose qui n'est pas prévu par le C-Engine.
Tu as affiché le sprite toi-même ? Tu es sûr que tu peux ?
As-tu regardé dans les jeux de Fife86 comment il affichait ce genre de choses ?
Citer : Posté le 17/11/2018 21:53 | #
Le sprite de la boite de dialogue oui c'est moi et tu as vu le résultat du coup.
Oui, le problème c'est qu'il n'a fais que des jeux de plateforme à part un ou il n'y a que du décor solide ou d'autre qui n'on pas d'alpha.
Je vais cherché est dans le pire des cas je demanderais à fife par mail, je cherche et je te tiendrais au courant.
Citer : Posté le 18/11/2018 19:44 | # | Fichier joint
J'ai enfin trouvé la solution je me sens bête parce que je l'avais déjà fais sans m'en rendre compte auparavant x)
Il fallait créer un "objet", une fonction dans le C-engine que j'avais utilisé pour le personnage.
On peut commander l'objet grâce à un script ( ce que j'avais fais pour le personnage ).
Voilà le résultat :
Je vais surement l'agrandir par la suite
Par contre j'ai une question, pour l'affichage du texte il vaut mieux faire :
Si cordonné du personnage = x , y
Alors afficher le texte
ou alors :
collision du personnage avec "un objet"
Alors affichage du texte
Merci d'avance pour la réponse
Citer : Posté le 18/11/2018 20:19 | #
À mon avis, pour que le tout soit résistant aux changements, il vaut mieux créer un objet fixe et invisible.
Citer : Posté le 18/11/2018 20:24 | #
D'accord merci je vais faire ça
Ajouté le 18/11/2018 à 23:56 :
Petite question surement simpliste excusez moi je n'ai pas vraiment les bases
J'ai créé ces deux variables dans mon fichier principal du jeu :
int y = 60;
et j'aimerais les testé dans un autre fichier, mais il me dit que je ne les ai pas déclaré, j'en déduis qu'il ne peut pas lire.
J'aimerais savoir command faire
Citer : Posté le 19/11/2018 07:23 | #
Le TDM 07 : Écrire des programmes C avec plusieurs fichiers, est fait pour toi !
Citer : Posté le 19/11/2018 15:42 | #
Merci ce tutoriel tombe bien
Ajouté le 22/11/2018 à 23:42 :
Bon.. je vais l'avouer je suis sécher par pas mal de truc, une petite représentation de mon sentiment :
Mes nuits à essayer de programmer.
Je n'arrive plus à avancer
Petit résumé :
Tout d'abord, encore et toujours cette boite de dialogue avec ses problèmes interminable.
Je l'ai montré dans le dernier screen, j'avais réussi à afficher la boite de dialogue avec son alpha grâce au C-engine.
Cependant, une fois l'objet créé il faut que je face en sorte de placer la boite ou je le souhaite.
Je vais donc d'abord expliquer le fonctionnement :
Dia->GetTransforms()->SetXY( 10 , 10 ); // on le place dans la map
Dia->GetRender()->SetRender(A_DialgueV1, 2); //on affecte le sprite défini au préalable
Alors dis comme ça, ou est le problème ?
Et bien le problème vient de
Oui j'ai bien pris en compte le " on le place dans la map " car c'est la chose qui me dérange le plus !
Pour placer la boite de dialogue il me faudrait une fonction permettant de le placer par rapport au coordonné de l'écran.. et non de la map !
----------------------------------------------------------------------------------------------------------------------------------
A ce moment là je me suis dis, autant contourner le problème, tu va faire la boite de dialogue par rapport au coordonné du joueur.
Mais là encore un problème.. je ne sais pas comment récupérer les coordonnés du joueur
Explication :
Pour créer le joueur, c'est la même chose que la boite de dialogue :
Perso->GetTransforms()->SetXY(x,y);
Perso->GetRender()->SetRender(A_Perso , 6);
et en plus de ça un script est rattaché à l'objet au joueur :
void Control::Update()
{
bool isdo = false; //variable pour savoir si le joueur effectue une action
{
//*************Horizontal**************//
if(input_press(K_RIGHT) and (isdo == false))
{
Move(2,0); // ( c'est une fonction du C-engine ) l'objet rattaché au script bouge de 2 pixel vers la droite
SetIt(1); // animation de sprite qui marche vers la droite qui se lance
GetObject()->GetRender()->ReverseRender(true); //indique qu'il faut afficher le sprite en miroir ( il est de base tourner vers la gauche c'est un gain de place
isdo = true; //il est entrain de faire quelque chose
p = 1;
}
if(input_press(K_LEFT) and (isdo == false))
{
Move(-2,0);
SetIt(1);
GetObject()->GetRender()->ReverseRender(false);
isdo = true;
p = 2;
}
if(input_press(K_DOWN ) and (isdo == false))
{
Move(0,-2);
SetIt(2);
GetObject()->GetRender()->ReverseRender(false);
isdo = true;
p = 3;
}
if(input_press(K_UP) and (isdo == false))
{
Move(0,2);
SetIt(4);
n = 2;
GetObject()->GetRender()->ReverseRender(false);
isdo = true;
p = 4;
}
if(isdo == false) {
if (p == 1)SetIt(0); //quand le personnage s'arrête le sprite qui ne bouge pas est défini par le dernier sens du joueur
if (p == 2)SetIt(0);
if (p == 3)SetIt(3);
if (p == 4)SetIt(5);
}
}
if (input_press(K_EXIT))GetEngine()->StopGame();
GetEngine()->MiddleScreen(GetX() + 6 , GetY() + 6); //place la caméra de la map en cours pour centre le personnage
}
J'ai un peux expliqué le code pour qu'on comprenne mieux.
Je ne sais donc pas comment récupérer les coordonné du personnage car l'objet bouge grâce à la fonction " Move ".
Apres avoir fais quelque tentative et teste échoué, j'ai décider de faire le tour vers les tuto du C-engine pour voir si je n'était pas passé à coté de quelque chose d'important !
Dans la deuxieme vidéo tuto, Fife86 explique seulement qu'il affiche le personnage grâce à, exemple :
Il affiche grâce à " SetXY (x,y) " et il explique que cette fonction utilise la position "ABSOLU" ( position absolu = la position par rapport à la map ).
Je me suis donc dis, si il dit ça, il doit forcement exister une autre fonction pour l'affichage par rapport à l'écran !
Je me met donc à fouiller dans les fichier du C-engine et je fini par trouvé ça :
void SetRelativeXY(double vx ,double vy);
void SetReelXY(double vx ,double vy);
Vec2 positionreel; // en m
Vec2 positionabsolu; // en pixel
Vec2 positionrelative; // en pixel
Je me suis alors dis " Wow c'est bon tu as trouvé la solution il faut utiliser SetReelXY(double vx ,double vy);
Je test donc et là.. non toujours pas, il affiche l'objet en fonction..de la map...
Je tien à dire que si j'utilise MonochromeLib, je ne peux pas afficher le sprite avec l'alpha car la map ce redessine dessus et désactive l'effet
Je ne sais pas si vous avez des solutions à proposer, ou alors des alternatives je ne sais pas, j'ai passé sous silence plusieurs essaies de technique raté sinon se serais bien trop long et sans intérêt, si je ne trouve pas de solution, je me contenterais d'une case toute noir, plus de problème d'alpha mais se ne serais pas super comme résultat
Ajouté le 22/11/2018 à 23:48 :
( J'ai aussi essayé d'effectuer un changement de salle mais le système me parait complexe et n'es pas expliqué dans les tuto, je vais donc devoir regarder le fonctionnement, ça me prendra du temps mais je pense y arriver )
Oui beaucoup de problème dans ce projet je sais
Citer : Posté le 23/11/2018 07:17 | #
Ouh, c'est pas joli-joli tout ça. Tu devrais avoir un framework dans le C-Engine pour modifier le HUD, mais je n'ai pas trouvé grand-chose dans les sources. Tu es donc obligé de détourner des fonctionnalités existantes, on dirait.
D'abord, afficher un objet à une position relative de ton sprite est peut-être acceptable, si tu es sûr que le sprite est toujours au milieu de l'écran. Je pense que toutes les autres solutions ou presques seront trop du hack pour être viables.
Vois ici pour savoir comment il fait le rendu : src/Object/Render.cpp:166
Je pense que SetRelativeXY() est plus approprié, du coup. Tu as essayé ça ?