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

Forum Casio - Discussions


Index du Forum » Discussions » Comment faire un jeu en C pour Graph 75 et 35+ ?
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Comment faire un jeu en C pour Graph 75 et 35+ ?

Posté le 27/11/2019 15:12

Bonjour à tous,
Récemment j'ai voulu commencé à faire un jeux en C mais le souci c'est que je ne parvient pas à trouver les alternatives de certaines fonction présente en BASIC comme par exemple:
-Pxlon
-F-Line
-Getkey
-Text

Tout ce qui relève à des fonction spécifique de la calculatrice, dont ces fonctions (celles que je viens d’énoncé au dessus) qui me semble indispensable.

Merci d'avance pour votre aide


Kbd2 Hors ligne Membre Points: 268 Défis: 0 Message

Citer : Posté le 11/01/2021 13:27 | #


Nevermind, you have an array of pointers - delete[] only works for arrays of objects.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 11/01/2021 13:29 | #


D'accord, merci à tous pour votre aide et toute ces explications
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 11/01/2021 13:37 | #


Très bien ton code. N'oublie pas delete AllElem aussi.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 11/01/2021 13:41 | #


D'acc merci pour tout

Ajouté le 12/01/2021 à 12:47 :
Est-ce qu'il y a un topic qui explique l'utilisation du port 3 pin pour le SDK ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 15:18 | # | Fichier joint


Alors j'ai fait tout les changements pour les Component et les GameObject mais ils me mettent une erreur disant :
'A value of type "SceneManager *" cannot be used to initialize an entity of type "GameObject *" '
En fait, j'utilise une autre class pour créer la map mais elle fait buggé et j'arrive pas à résoudre.
J'ai mis en pièce jointe tout le code que j'ai fait, et j'ai commenté les fonctions.
Si vous pouvez jetez un coup d'oeil pour voir ce qu'il ne va pas malgré les corrections que j'ai appliqué ça m'aiderait beaucoup pour faire avancer le projet particule.
Les scripts où il faut regarder sont : ClassParticule.cpp, ClassParticule.h et Tutoriel.cpp
Merci d'avance
"La créativité est contagieuse faites la tourner"
Albert Einstein
Kbd2 Hors ligne Membre Points: 268 Défis: 0 Message

Citer : Posté le 12/01/2021 15:36 | #


I believe it's because you're trying to initialise a pointer to a GameObject with those args, instead of initialising the actual GameObject. This obviously won't work.

e.g.
GameObject *Default14_1_6(this,TerrainIvC31,92,49,16,16,"Default14","Environnement",Default14Compo1_6,1);
should be
GameObject Default14_1_6(this,TerrainIvC31,92,49,16,16,"Default14","Environnement",Default14Compo1_6,1);
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 15:54 | #


Oui mais après je peux plus utiliser les pointers ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Kbd2 Hors ligne Membre Points: 268 Défis: 0 Message

Citer : Posté le 12/01/2021 16:00 | #


Try GameObject *x = new GameObject(args) if you want to create it in the heap. Just remember to delete it when you're done.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 16:02 | #


ha ok, merci. Je vais corriger ça !

Ajouté le 12/01/2021 à 16:58 :
Alors j'ai tout corriger et il y a un bug de lors de l'exécution et non lors de la compilation à cette ligne là :
scene.AllElem->AllCompo[j]->OnUpdate();
je pense qu'il a du mal avec les méthode virtuel

"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 12/01/2021 17:08 | #


Quelle erreur ? Et tu peux déjà regarder dans le listing du linker si la vtable existe et regarder la valeur de OnUpdate en tant que pointeur.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 17:12 | #


Alors c'est très bizarre parce j'ai recompiler plusieurs fois le script et la compilation a bien fonctionner mais le jeu plantait, mais j'ai fermé et relancer SDK et j'ai relancer une nouvelle compilation et j'ai plus eu d'erreur
Ca peut-être le SDK qui a du avoir un problème
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 12/01/2021 17:13 | #


Bon le tout c'est que ça marche. ^^"
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 17:15 | #


Oui, normalement la partie du moteur de jeu sur le SDK est presque terminé, il me reste plus de terminer la conversion depuis particule pour pouvoir le rendre publique

Ajouté le 12/01/2021 à 17:24 :
Est-ce que le fait de remplacer la liste AllElem va supprimer automatiquement les anciens GameObject et Component ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 12/01/2021 17:28 | #


Non. Écraser une valeur ne delete pas l'ancienne (c'est une des choses à quoi unique_ptr sert).
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 17:35 | #


Ok merci pour l'info

Ajouté le 12/01/2021 à 17:51 :
Alors j'ai fais quelques petites modifications sur l'affichage est depuis plus rien ne s'affiche.
avant mon code était comme ça


    while (1) {
        ML_clear_vram();
        for (int i(0); i < scene.AllElemLength; ++i)
        {
            if (scene.AllElem[i]->x - scene.CamX + scene.AllElem[i]->w > 0 && scene.AllElem[i]->x - scene.CamX < 128 && scene.AllElem[i]->y - scene.CamY + scene.AllElem[i]->h>0 && scene.AllElem[i]->y - scene.CamY < 64) {
                for (int j(0); j < scene.AllElem[i]->AllCompoLength; ++j)
                {
                    scene.AllElem[i]->AllCompo[j]->OnUpdate();
                }
                scene.AllElem[i]->afficher(scene.CamX, scene.CamY);
            }
        }
        GetKey(&key);
    }

Et je l'ai changé en ça, car je voulais que l'écran se rafraichi même si aucune touche n'est pressé et depuis plus rien ne s'affiche :


    while (1) {
        ML_clear_vram();
        for (int i(0); i < scene.AllElemLength; ++i)
        {
            if (scene.AllElem[i]->x - scene.CamX + scene.AllElem[i]->w > 0 && scene.AllElem[i]->x - scene.CamX < 128 && scene.AllElem[i]->y - scene.CamY + scene.AllElem[i]->h>0 && scene.AllElem[i]->y - scene.CamY < 64) {
                for (int j(0); j < scene.AllElem[i]->AllCompoLength; ++j)
                {
                    scene.AllElem[i]->AllCompo[j]->OnUpdate();
                }
                scene.AllElem[i]->afficher(scene.CamX, scene.CamY);
            }
        }
        Sleep(100);
    }


Ajouté le 12/01/2021 à 17:52 :
la modification c'est le Getkey à la fin

Ajouté le 12/01/2021 à 17:55 :
Du coup je pense que le problème vient de ML_clear_vram(); qui supprime trop vite et du coup on a pas le temps de voir mais apparemment le Sleep ne fonctionne pas.
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 12/01/2021 18:01 | #


Il faut faire Bdisp_PutDisp_DD() ou ML_display_vram() pour afficher ce que tu as dessiné à l'écran. Avant tu ne t'en rendais pas compte parce que GetKey() le fait pour toi. Mais maintenant il faut que l'appelles tout seul
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 18:09 | #


Ha oui en effet !
En plus ça va encore plus vite qu'avant !
C'est trop bien ça !

Ha autre chose aussi (je sais je casse peut-être les pieds de certaines et j'en suis désolé), mais quand je test le programme sur ma Casio Graph 35+E, certaines touches ne sont pas reconnues alors que pourtant j'ai belle et bien faite les modifications du SDK pour que ça soit compatible pour le SH3/SH4
"La créativité est contagieuse faites la tourner"
Albert Einstein
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 18:15 | # | Fichier joint


J'utilise ces fichier usefull, peut-être que le problème vient de là ?
"La créativité est contagieuse faites la tourner"
Albert Einstein
Lephenixnoir Hors ligne Administrateur Points: 20773 Défis: 143 Message

Citer : Posté le 12/01/2021 18:16 | #


En plus ça va encore plus vite qu'avant !

Ça c'est simplement parce que GetKey() ne répète les touches qu'après 625 ms (la première fois) et 125 ms (les fois suivantes). Tu peux changer ça aussi, avec Bkey_SetRepeatRate(50, 50) par exemple (je peux me tromper sur le nom de la fonction, c'est de mémoire).

Pour l'autre problème ça ne me dit rien à première vue.
Farhi Hors ligne Membre Points: 596 Défis: 0 Message

Citer : Posté le 12/01/2021 18:19 | #


Lephenixnoir a écrit :
En plus ça va encore plus vite qu'avant !

Ça c'est simplement parce que GetKey() ne répète les touches qu'après 625 ms (la première fois) et 125 ms (les fois suivantes). Tu peux changer ça aussi, avec Bkey_SetRepeatRate(50, 50) par exemple (je peux me tromper sur le nom de la fonction, c'est de mémoire).

Pour l'autre problème ça ne me dit rien à première vue.

D'accord merci pour tes conseils, mais je pense que je vais garder une vitesse élevé pour avoir plus de fps

(pour l'autre problème, c'est les touches F1 à F6 qui sont pas reconnue alors que le pad "Replay" lui fonctionne)
"La créativité est contagieuse faites la tourner"
Albert Einstein
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 12/01/2021 18:35 | #


Si tu veux des fps constants, utilise des timers, et Gint (parce qu’apparemment ce n'est pas le cas )
C'est possible avec fxlib mais c'est nettement plus chiant
In Arch, I trust ! And you ?

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 95 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