Nouveau petit projet SGDK
5 participants
Page 2 sur 2
Page 2 sur 2 • 1, 2
Re: Nouveau petit projet SGDK
Y a aucun problème pour gérer tes variables locales dans une boucle, t'inquiètes pas.
Tu peux aussi remplacer les xa=xa+2 par xa+=2 ( ou xa-=2 )
Les syntaxes du C ...
Bravo en tout cas pour tes avancées !
Tu peux aussi remplacer les xa=xa+2 par xa+=2 ( ou xa-=2 )
Les syntaxes du C ...
Bravo en tout cas pour tes avancées !
Invité- Invité
Re: Nouveau petit projet SGDK
Merci Vetea pour le tuyaux des raccourcis, oui je suis content j'avance, maintenant je sais :
- Créer un sprite en matrice
- Importer un sprite Photoshop
- Créer des palettes
- Déplacer un sprite
- Afficher et scroller des plans
Maintenant je dois voir les collisions, mieux comprendre Rescomp et Sprite Engine et je pourrais bientôt commencer un tout petit jeu pour consolider tout ça
- Créer un sprite en matrice
- Importer un sprite Photoshop
- Créer des palettes
- Déplacer un sprite
- Afficher et scroller des plans
Maintenant je dois voir les collisions, mieux comprendre Rescomp et Sprite Engine et je pourrais bientôt commencer un tout petit jeu pour consolider tout ça
tetsuro- Patient contaminé
- Nombre de messages : 593
Age : 47
Localisation : Carcassonne
Date d'inscription : 27/12/2015
Re: Nouveau petit projet SGDK
tetsuro a écrit:Coucou Tryphon, j'ai testé de déclarer le u16 dans le main et ça ne fonctionne pas, le pad ne répond plus, il faut le déclarer dans le while, Stef dit de faire comme ça, j'ai suivi :)
J'ai regardé pour le parallaxe car j'avais un doute et si si, un simple défilement sur 2 plans ou plus est un parallaxe : https://en.wikipedia.org/wiki/Parallax_scrolling
Tu confonds déclaration et affectation. Tu déclares (u16 value) après le main, avec les xa, xb toussa et tu l'affectes plus tard, comme ça :
- Code:
int main()
{
// SGDK variables types
s16 xb = 0;
s16 yb = 0;
s16 xa = 0;
s16 ya = 0;
u16 value;
// bgb.png palette
VDP_setPalette(PAL0, sea.palette->data);
// bga.png palette
VDP_setPalette(PAL1, tree.palette->data);
// Load pictures in VRAM
VDP_drawImageEx(PLAN_B, &sea, TILE_ATTR_FULL(PAL0, 0,0,0,1), xb, yb, 0, CPU);
VDP_drawImageEx(PLAN_A, &tree, TILE_ATTR_FULL(PAL1, 0,0,0,384), xa, ya, 0, CPU);
while(TRUE)
{
// Update scollings
VDP_setHorizontalScroll(PLAN_B, xb);
VDP_setHorizontalScroll(PLAN_A, xa);
// Pad
value = JOY_readJoypad(JOY_1);
if(value & BUTTON_LEFT)
{
xb++;
xa = xa +2;
}
else if(value & BUTTON_RIGHT)
{
xb--;
xa = xa -2;
}
// TV
VDP_waitVSync();
}
return(0);
}
Ce que tu fais est correct hein, c'est juste que c'est pas beau (puis c'est important de bien faire la différence dans ta tête entre l'affectation et la déclaration).
J'aurais même perso déclaré :
- Code:
// SGDK variables types
// Declarations
s16 xb, yb, xa, ya;
u16 value;
// affectations
sa = 0;
yb = 0;
xa = 0;
ya = 0;
C'est du pinaillage hein, mais autant prendre de bonnes habitudes dès le début
Vetea a raison sinon pour les xa -= 2; (en plus ça marche dans d'autres langages).
Pour le parallaxe, il me semble que c'était Touko qui avait fait une distinction entre les scrollings par ligne et les scrollings à plan (ce qui s'explique, c'est pas la même technique), mais ça date. Faudrait lui demander, peut-être que dans la scène micro ils ont une terminologie plus précise...
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: Nouveau petit projet SGDK
Merci t'as raison c'est plus propre de déclarer le u16 value seul, par contre j'ai toujours pris l’habitude de déclarer/affecter en même temps, je n'ai jamais vu ou compris l’intérêt de déclarer d'abord et ensuite d'affecter juste en bas. Je trouve que ça rend le code plus long, on réécris deux fois la même chose et moins visible. Tu peux m'expliquer l’intérêt qui m'échappe stp ? :)
Dernière édition par tetsuro le Lun 14 Jan 2019 - 16:42, édité 1 fois
tetsuro- Patient contaminé
- Nombre de messages : 593
Age : 47
Localisation : Carcassonne
Date d'inscription : 27/12/2015
Re: Nouveau petit projet SGDK
Ben c'est juste que ce sont deux opérations différentes.
Perso, je déclare et affecte en même temps quand mes variables sont des "constantes", genre :
(Box c'est un type de SGDK pour représenter un rectangle).
Par contre, si c'est une variable (et qu'elle a donc pour objectif d'être affectée plusieurs fois), je sépare les deux.
De plus, je déclare toujours mes variables locales juste après la déclaration de fonction (y compris les index des for), parce que ça me permet d'en tenir le compte (et du coup d'en réutiliser). Je suis sûr qu'un bon compilateur doit faire ce genre d'optimisations tout seul, mais je n'aime pas compter sur les optimisations du compilateur que je ne maîtrise pas.
Après chacun fait ce qu'il veut hein
Perso, je déclare et affecte en même temps quand mes variables sont des "constantes", genre :
- Code:
const Box hitbox = {1O, 2O, 2O, 1O};
(Box c'est un type de SGDK pour représenter un rectangle).
Par contre, si c'est une variable (et qu'elle a donc pour objectif d'être affectée plusieurs fois), je sépare les deux.
De plus, je déclare toujours mes variables locales juste après la déclaration de fonction (y compris les index des for), parce que ça me permet d'en tenir le compte (et du coup d'en réutiliser). Je suis sûr qu'un bon compilateur doit faire ce genre d'optimisations tout seul, mais je n'aime pas compter sur les optimisations du compilateur que je ne maîtrise pas.
Après chacun fait ce qu'il veut hein
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: Nouveau petit projet SGDK
Tryphon a écrit:Ton code est correct. Déclare ton u16 value au début du main, pas dans la boucle (c'est pas beau).
Juste sur ce point en particulier :
Perso c'est ce que je faisais avant (en C au moins) mais maintenant j'ai tendance à localiser le plus possible mes variables (i.e. les déclarer uniquement dans le scope où elles sont utilisées), et ce, même en C (car les normes plus récentes l'autorisent). Ca permet, d'une part, de limiter leur durée de vie et d'aider le compilo éventuellement, d'autre part, ça évite aussi d'avoir une variable utilisée pour faire différentes choses (genre une variable 'value' qui va servir à stocker d'abord un nombre de carotte, puis ensuite une vitesse par exemple.. ce qui nuit à la compréhension du code je trouve). Par contre j'essai au moins de les déclarer en début de scopepour la lisibilité
Sinon l'affectation à la déclaration à un intérêt si tu déclares une variable constante (dont la valeur ne va jamais changer), d'ailleurs c'est le seul moyen de faire dans ce cas :
- Code:
const u16 sizeList = myList.getSize();
Ca aide aussi le compilo à optimiser (même si aujourd'hui ils sont tous assez intelligent pour voir que la variable est effectivement constante) et aussi à rendre le code un poil plus lisible (tu sais que la valeur de cette variable ne pas jamais changer).
Dernière édition par Stef le Lun 14 Jan 2019 - 16:39, édité 4 fois
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Nouveau petit projet SGDK
Je peux pas faire ça dans une boucle, j'aurais l'impression de faire n déclarations
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: Nouveau petit projet SGDK
Tryphon a écrit:Je peux pas faire ça dans une boucle, j'aurais l'impression de faire n déclarations
Haha je comprends mais pourtant ce n'est pas le cas après si le compilo est bête il pourrait effectivement allouer à chaque fois sur la pile mais là il faudrait vraiment un mauvais compilateur pour ça.
Après on a chacun ses méthodes et son style de coder. L'important est d'avoir un code lisible, le reste c'est du détail :)
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Nouveau petit projet SGDK
Honnêtement, je savais pas qu'on pouvait faire ça et que ça jouait sur la compilation. Pour ma défense, j'ai appris le C il y a 20 ans pour relire du code qui était écrit avec les déclarations de fonction dans le genre du Kerningham & Ritchie
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: Nouveau petit projet SGDK
Coucou, une ch'tite vidéo de mon avancée, grâce à vous j'arrive à scroll les 2 plans, afficher et déplacer les sprites, maintenant ej dois m'attaquer aux collisions et définir ce fameux petit projet :)
tetsuro- Patient contaminé
- Nombre de messages : 593
Age : 47
Localisation : Carcassonne
Date d'inscription : 27/12/2015
Re: Nouveau petit projet SGDK
Bien joué ! C'est plus simple de commencer en modifiant un projet, ça permet de comprendre un peu le truc. Je vois que tu as fait un scroll infini là où je l'avais volontairement bloqué
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Nouveau petit projet SGDK
Après avoir tâté de la bête un petit moment, ce "Nouveau petit projet SGDK" est en fait la reprise d'un ancien projet dont j'avais seulement parlé il y a un moment sur le forum...
GalaGAGA, un remake du shoot Galaga.
Le post est ici : https://www.gamopat-forum.com/t87472-wip-megadrive-galagaga-shoot
Et c'est là bas que le sujet continue ! :)
Merci pour votre aide précieuse les gars !
GalaGAGA, un remake du shoot Galaga.
Le post est ici : https://www.gamopat-forum.com/t87472-wip-megadrive-galagaga-shoot
Et c'est là bas que le sujet continue ! :)
Merci pour votre aide précieuse les gars !
tetsuro- Patient contaminé
- Nombre de messages : 593
Age : 47
Localisation : Carcassonne
Date d'inscription : 27/12/2015
Page 2 sur 2 • 1, 2
Sujets similaires
» SGDK - Nouveau Projet (ou pas) - Night Stalker Legacy
» Le petit nouveau (Mais pas si petit quand même lol)
» Papi Commando RELOAD !! *SgdK* - Megadrive - Nouveau Scénario !
» Petit projet perso d'entraide
» [WIP] Nouveau projet Atari 2600 : Tsunami!
» Le petit nouveau (Mais pas si petit quand même lol)
» Papi Commando RELOAD !! *SgdK* - Megadrive - Nouveau Scénario !
» Petit projet perso d'entraide
» [WIP] Nouveau projet Atari 2600 : Tsunami!
Page 2 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum