Posté le 17/11/2023 20:36
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 75 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 17/11/2023 20:45 | #
tu dois pouvoir faire un truc du genre :
while (key != KEY_SHIFT)
{
dclear( C_WHITE );
dimage(94,165,&PressShiftToStartImg);
if (frame>99 && frame<199) dimage(125, 25, &MainMenuTitleImg);
dupdate();
frame++;
frame = frame % 200;
key = getkey().key;
}
Citer : Posté le 17/11/2023 20:46 | #
Pour que ça clignote en temps réel, il va falloir que tu changes à un moment la façon dont ta boucle est cadencée. Pour clignoter il suffit d'afficher une fois l'image et une fois pas, en alternance. Le problème là tout de suite c'est que quand tu utilises getkey(), le programme attend qu'une touche soit pressée et du coup il ne peut pas pendant ce temps dessiner une nouvelle image à envoyer à l'écran.
La formule pour convertir ça en une boucle plus sympa se fait en deux étapes : (1) remplacer la lecture des entrées par une fonction qui n'attend pas (ie. soit pollevent() soit keydown()), et (2) comme du coup ta boucle ira à fond la caisse, utiliser un timer pour établir un rythme régulier genre 30 tours de boucle par seconde.
Le tutoriel gint aborde ses détails dans cet épisode, à partir de la section "Structure d'une boucle de jeu animée".
Bonne idée de projet sinon, c'est un jeu cool Il y en a une version sur le site je crois mais rien de super poussé.
Citer : Posté le 20/11/2023 23:37 | #
Connaissez vous un site ou on peu apprendre le C (une documentation)ou il il y a tout pour apprendre le C et aussi quel sont les bibliothèque utilisable comme ca je peu voir tout les spécificité de chaque truc
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Citer : Posté le 11/04/2024 02:08 | #
salut
j'ai pas avance depuis le début mais c a cause de la réinitialisation de mon pc et que j'avais la flemme de réinstaller le SDK mais donc je l'ai réinstaller aujourd'hui
mais je ne sais pas pourquoi il ne veut pas sortir de la boucle avec ce code la et donc je me demandais ce que j'avais fait de mauvais j'ai tester de nombreuse chose mais sans succès c un peu aussi a cause de ca que j'avais laisser le projet un peu a l'abandon mais je me sens bien de le continuer de plus j'ai tout tenté ce que je pouvais mais je m'en remet a vous en ce moment car je n'y arrive pas
#include <gint/keyboard.h>
extern bopti_image_t PshiftStart;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define DIR_DOWN "DOWN"
#define DIR_RIGHT "RIGHT"
#define DIR_UP "UP"
#define DIR_LEFT "LEFT"
#define SHIFT "SHIFT"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(void)
{
dclear(C_BLACK);
dtext(1, 1, C_BLACK, "Exemple d'add-in fxSDK.");
dupdate();
int frame = 0;
char key = ' ';
while (key != 'SHIFT')
{
dtext(1, 1, C_BLACK, "work");
dupdate();
key = get_inputs();
}
dclear(C_WHITE);
dupdate();
return 1;
}
get_inputs(void)
{
int opt = GETKEY_DEFAULT & ~GETKEY_REP_ARROWS;
while(1)
{
int key = getkey_opt(opt, NULL).key;
if(key == KEY_DOWN) return DIR_DOWN;
if(key == KEY_RIGHT) return DIR_RIGHT;
if(key == KEY_UP) return DIR_UP;
if(key == KEY_LEFT) return DIR_LEFT;
if(key == KEY_SHIFT) return SHIFT;
}
}
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Citer : Posté le 11/04/2024 09:51 | #
Tu mélanges un peu les types de données. Quand tu écris key != 'SHIFT' ça ne fait pas du tout ce que tu penses. La notation apostrophe sert à délimiter un seul caractère, e.g. 'S' ou 'H'. Mettre plusieurs caractères entre des apostrophes n'a pas de sens et tu dois avoir un avertissement du compilateur à ce sujet.
Le cœur de ton problème c'est que tu essaies de représenter tes directions/actions avec du texte. C'est inutilement compliqué ; en C pour ce genre de choses on utilise des entiers. Comme tu peux le voir, la valeur numérique des touches dans gint est définie par <gint/keycodes.h> avec des constantes comme KEY_SHIFT, KEY_F1, KEY_7, etc, donc utiliser un entier ne t'empêche pas d'avoir un joli nom dessus.
Tu pourrais donc numéroter tes actions, disons un nombre entre 1 et 5 :
#define DIR_RIGHT 2
#define DIR_UP 3
#define DIR_LEFT 4
#define SHIFT 5
Et ensuite tu peux oublier ces numéros et juste utiliser tes jolis nom DIR_DOWN, DIR_RIGHT, etc. à la place. Donc dans la condition de la boucle :
Et dans la fonction get_inputs(), return DIR_DOWN etc. ce que tu fais déjà très bien.
Comme key est un entier maintenant, il faut le déclarer comme un int, et comme valeur initiale on peut lui donner 0 qui ne correspond à aucune action :
// ->
int key = 0;
Enfin, dans la fonction get_inputs(), n'oublie pas de spécifier le type de retour :
// ->
int get_inputs(void)
Tu noteras qu'avec ton ancienne version des #define, la fonction get_inputs() renvoyait des chaînes de caractères (char *), que tu stockais ensuite dans un char (la variable key), que tu comparais ensuite à 'SHIFT' qui est un int, bref un sacré mélange.
Morale : en C on utilise des entiers, c'est plus facile et ça va plus vite. Autre avertissement : tu ne peux pas comparer des chaînes de caractères avec == donc même si tu avais tout bien fait correctement la condition aurait quand même pas bien marché. Vraiment, les entiers c'est plus simple.
Citer : Posté le 11/04/2024 23:00 | #
Ok merci beaucoup mais ca veut toujours pas quitter la boucle
en fait nan il n'entre jamais dans la boucle
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Citer : Posté le 11/04/2024 23:23 | #
J'ai une petite question, pourquoi fais tu une fonction get_inputs alors que gint t'offre déjà la fonction 'getkey().key' ?
Citer : Posté le 11/04/2024 23:44 | #
par ce que getkey peu renvoyer plusieurs fois la touche pressé d'après ce que j'ai lu alors que avec l'autre méthode ca le renvoi que un fois si on apuit longtemps
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Citer : Posté le 11/04/2024 23:48 | #
par ce que getkey peu renvoyer plusieurs fois la touche pressé d'après ce que j'ai lu alors que avec l'autre méthode ca le renvoi que un fois si on apuit longtemps
Citer : Posté le 11/04/2024 23:50 | #
voila durant son tuto sur la creatiuon d'un add-in LePhénix e a expique ca :
Une des fonctionnalités assurées par getkey() est la répétition des touches. Si vous gardez une touche appuyée, getkey() est susceptible de la renvoyer plusieurs fois. Par défaut, seules les touches fléchées sont répétées (comme GetKey()), ce qui permet par exemple de se déplacer dans des listes ou des menus. Mais ici, comme le jeu est un puzzle nécessitant de bien réfléchir à chaque coup, on veut que chaque pression déplace le joueur exactement une fois (sinon on risque un faux mouvement qui gâcherait le niveau).
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum