Posté le 26/11/2020 19:39
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 214 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 26/11/2020 20:16 | #
Ben c’est normal vu le code, isNotGood peut pas passer à true dans la boucle là, non ?
while(isNotGood != true )
{
dclear(C_WHITE);
dtext(x+49,yballe,C_BLACK,"|");
yballe = yballe-10;
dimage(x,150,&img_Vaisseau);
dupdate();
}
Citer : Posté le 26/11/2020 20:21 | #
Ha mais oui, le if(yballe< 0) il faut que je le mettes dans la boucle while !
J'suis con !
Citer : Posté le 26/11/2020 20:31 | #
C'est des problèmes de C tout ça pas de gint. Dis autrement, c'est pas parce que tu mets "gint" dans le titre que tout de suite il est précis. ^^"
Citer : Posté le 26/11/2020 21:46 | #
C'est vrai, je ferais attention la prochaine fois !
Ajouté le 16/12/2020 à 19:21 :
Je mets ca là pour éviter de recréer des topics :
J'ai un problème avec ce code :
#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/clock.h>
int main(void)
{
extern bopti_image_t img_personnage;
extern bopti_image_t img_personnagemarche;
int a = 0;
int x = 0;
int key;
while(a != 1)
{
dclear(C_WHITE);
dimage(x,40,&img_personnage);
dupdate();
key = getkey().key;
if(key == KEY_EXE)
a = 1;
if(key == KEY_RIGHT)
{
sleep_us(25000);
dclear(C_WHITE);
dimage(x,40,&img_personnagemarche);
dupdate();
sleep_us(25000);
x = x+5;
}
}
getkey();
return 1;
}
(Et je sais que sleep_us n'est pas la meilleure solution pour des frames)
Mon personnage avance, mais sans avoir une "phase" de marche : en gros, ,&img_personnagemarche n'est pas affiché...
Citer : Posté le 16/12/2020 19:53 | #
C'est un code partagé avec Orpas ? :3
Tu ne peux vraiment, vraiment pas te permettre d'afficher conditionnellement des frames comme ça. Force-toi à avoir un seul code qui affiche à l'écran suivi d'un seul code qui fait les entrées.
int timeout = 1;
while(a != 1)
{
/* Affichage */
dclear(C_WHITE);
dimage(x,40,marche ? &img_personnagemarche : &img_personnage);
dupdate();
/* Réinitialisation des infos du frame précédent */
marche = 0;
/* Lecture des entrées */
key = getkey_opt(GETKEY_DEFAULT, &timeout).key;
if(key == KEY_EXE)
a = 1;
if(key == KEY_RIGHT)
marche = 1;
/* Simulation du monde */
if(marche)
x = x+1;
/* Délai */
sleep_us(25000);
}
Au passage +5 à chaque frame c'est super rapide (ça traverse tout l'écran en moins d'une seconde), j'ai mis +1 ici juste pour être sûr que tu puisses voir.
Et surtout, j'ai changé ton appel à getkey() en un appel à getkey_opt() qui rend ton délai viable. Sinon tu fais pas du tout un tour toutes les 25 ms parce que getkey() attend que tu appuies sur une touche avant de s'arrêter.
Citer : Posté le 16/12/2020 20:33 | #
Merci beaucoup pour le code et l'explication!
Ajouté le 19/12/2020 à 19:00 :
..mais ca ne marche pas.
On dirait que le personnage ne se met jamais en position marche...
Ou en tout cas cela ne se voit pas...
Citer : Posté le 19/12/2020 19:03 | #
Je voudrais pouvoir reproduire pour déterminer le problème. Où est-ce que je peux trouver le projet ?
Citer : Posté le 19/12/2020 19:04 | #
Ah attend je vais mettre tout ca sur Github
Ajouté le 19/12/2020 à 19:43 :
Bon, j'ai crée accidentellement un dossier Test que je ne peux plus enlever mais voilà : https://github.com/OrPas/Elphorina
Citer : Posté le 19/12/2020 20:21 | #
L'animation de marche fonctionne, mais elle s'arrête au bout d'un frame et n'est donc visible que pendant 1/40s. Tu peux voir le bout du pied s'avancer si tu réagis assez vite.
Citer : Posté le 19/12/2020 21:01 | #
Du coup il faut augmenter le délai de sleep_us()?
Si oui de combien ?
Citer : Posté le 19/12/2020 21:06 | #
Tu es en train de proposer de réduire la vitesse sur toutes les routes de France simplement parce que les voitures passent trop vite sur le passage piéton en bas de chez toi. Regarde de plus près...
Citer : Posté le 19/12/2020 21:08 | #
Alors... on met "marche" à 0 toutes les 3 boucles ?( enfin toutes les 3 fois que la boucle se répète)
Ajouté le 19/12/2020 à 21:11 :
Ou après /simulation du monde,
monde = 0
x = x+1;
}
Ajouté le 19/12/2020 à 21:11 :
(Je dis 3 au hasard)
Citer : Posté le 19/12/2020 21:12 | #
Voilà, c'est mieux. En fait ton animation dure 1 frame du moteur mais c'est trop court. Il faut donc la faire durer plus longtemps.
Ce que tu peux faire pour atteindre cet effet simplement c'est d'affecter marche=5 (par exemple) quand tu commences le déplacement, et à chaque tour au lieu de faire marche=0 tu fais if(marche > 0) marche--. Ainsi marche devient le compteur du nombre de frames qu'il reste avant que l'animation ne se termine.
Soit dit en passant, tu as peut-être (c'est ton choix) envie de refuser les déplacement si marche>0 (en d'autres termes, empêcher le joueur d'interrompre une animation de marche pour partir dans une autre direction).
Pour ta suggestion je sais pas trop ce que monde est donc je sais pas trop, ça a pas l'air hyper robuste.
Citer : Posté le 19/12/2020 21:17 | #
Monde = marche, je me suis emmélé les pinceaux !
Citer : Posté le 19/12/2020 21:18 | #
Ah donc oui ça marche aussi sauf que tu comptes vers le haut et moi vers le bas. Ça revient à peu près au même.
Citer : Posté le 19/12/2020 21:48 | #
Ok je vois merci !
Ajouté le 19/12/2020 à 22:02 :
Du reste , est ce que 5 frames sont suffisants ?
Citer : Posté le 19/12/2020 22:02 | #
Eh bien à toi de voir la durée que tu veux et l'animation que tu veux.
Citer : Posté le 19/12/2020 22:20 | #
Je vais tester ça demain, en tout cas merci beaucoup !
Ajouté le 20/12/2020 à 19:13 :
Ca marche ! Bon seul problème, personnage_marche.png est
très mochespécialAjouté le 20/12/2020 à 19:25 :
...mais en mettant "
x = 0;
dans mon code cela ne marche tout simplement pas...
Citer : Posté le 20/12/2020 19:28 | #
Si x avance pas de 1 en 1 tu peux passer par-dessus 140. Essaie if(x >= 140) ?
Citer : Posté le 20/12/2020 19:36 | #
Ca marche, merci ! Effectivement il n'avancait pas de 1 en 1, en fait le problème étant qu'il faut que je spamme le bouton pour avancer.
D'ailleurs, y a til un moyen de faire en sorte qu'il avance continuellement si la touche reste enfoncée ? (Avec le code dispo sur GitHub que je t'avais filé la dernière fois, et que je vais mettre à jour, je remets un message quand il est à jour...)
Ajouté le 20/12/2020 à 19:45 :
(GitHub mis à jour : https://github.com/OrPas/Elphorina/)