Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Gint problème while
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

Gint problème while

Posté le 26/11/2020 19:39

Bonjour !
J'ai fait ce code :
#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/gint.h>
#define bool int
#define true 1
#define false 0

int main(void)
{
        extern bopti_image_t img_Vaisseau;
        int key = 0;
        int x = 0;
        int yballe = 150;
        bool isNotGood = false;

        dclear(C_WHITE);
        bool isFinish = false ;
        while(!isFinish){
                dclear(C_WHITE);
                dimage(x, 150,&img_Vaisseau);
                dupdate();
                key = getkey_opt(GETKEY_DEFAULT & ~GETKEY_MOD_SHIFT,0).key;
                if(key == KEY_EXIT)
                                gint_osmenu();
                if(key == KEY_LEFT)
                        x = x-10;
                if(key == KEY_RIGHT)
                        x = x+10;
                if(key == KEY_SHIFT)
                {
                        yballe = 150;
                        if(yballe <= 0)
                        {

                                isNotGood = true;

                        }
                        while(isNotGood != true )
                        {
                                dclear(C_WHITE);
                                dtext(x+49,yballe,C_BLACK,"|");
                                yballe = yballe-10;
                                dimage(x,150,&img_Vaisseau);
                                dupdate();
                        }
                }

        }

        getkey();
        return 1;
}

Mais ma boucle while(isNotGood != true) tourne à l'infini !
Si vous avez des idées, je suis preneur !


1, 2, 3, 4 Suivante
Breizh_craft En ligne Modérateur Points: 1086 Défis: 7 Message

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();
}

Breizh.pm – Un adminsys qui aime les galettes.
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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 !
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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. ^^"
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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é...
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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 marche = 0;
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.
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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...
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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 ?
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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.
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

Citer : Posté le 19/12/2020 21:01 | #


Du coup il faut augmenter le délai de sleep_us()?
Si oui de combien ?
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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...
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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,
if(monde == 3){
monde = 0
x = x+1;
}

?

Ajouté le 19/12/2020 à 21:11 :
(Je dis 3 au hasard)
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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.
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

Citer : Posté le 19/12/2020 21:17 | #


Monde = marche, je me suis emmélé les pinceaux !
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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.
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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 ?
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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.
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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 moche spécial

Ajouté le 20/12/2020 à 19:25 :
...mais en mettant "
               if(x == 140)
                       x = 0;

dans mon code cela ne marche tout simplement pas...
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
Lephenixnoir En ligne Administrateur Points: 19534 Défis: 142 Message

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) ?
Potter360 Hors ligne Rédacteur Points: 660 Défis: 0 Message

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/)
Hop là... toi qui lis cette signature... tu pourrais aussi aller voir mon projet Elphorina, un jeu de RPG-building !
1, 2, 3, 4 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 76 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