Nouveau petit projet SGDK

Page 2 sur 2 Précédent  1, 2

Aller en bas

Re: Nouveau petit projet SGDK

Message par Invité le Sam 12 Jan 2019 - 23:48

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 ) Wink
Les syntaxes du C ... Very Happy
Bravo en tout cas pour tes avancées !  thumleft

Invité
Invité


Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par tetsuro le Dim 13 Jan 2019 - 0:00

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 thumleft
tetsuro
tetsuro
Patient contaminé

Masculin Nombre de messages : 527
Age : 41
Localisation : Carcassonne
Date d'inscription : 27/12/2015

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Tryphon le Dim 13 Jan 2019 - 0:04

@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 Razz (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 Wink

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
Tryphon
Docteur *
Docteur *

Masculin Nombre de messages : 14038
Age : 42
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par tetsuro le Dim 13 Jan 2019 - 0:20

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
tetsuro
Patient contaminé

Masculin Nombre de messages : 527
Age : 41
Localisation : Carcassonne
Date d'inscription : 27/12/2015

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Tryphon le Dim 13 Jan 2019 - 0:30

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 :

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 Wink
Tryphon
Tryphon
Docteur *
Docteur *

Masculin Nombre de messages : 14038
Age : 42
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Stef le Lun 14 Jan 2019 - 12:52

@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é Wink

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
Stef
Infirmier

Masculin Nombre de messages : 4689
Age : 39
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Tryphon le Lun 14 Jan 2019 - 12:55

Je peux pas faire ça dans une boucle, j'aurais l'impression de faire n déclarations
Tryphon
Tryphon
Docteur *
Docteur *

Masculin Nombre de messages : 14038
Age : 42
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Stef le Lun 14 Jan 2019 - 13:02

@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 Wink 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
Stef
Infirmier

Masculin Nombre de messages : 4689
Age : 39
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Tryphon le Lun 14 Jan 2019 - 15:41

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
Tryphon
Docteur *
Docteur *

Masculin Nombre de messages : 14038
Age : 42
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par tetsuro le Mer 16 Jan 2019 - 9:31

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
tetsuro
Patient contaminé

Masculin Nombre de messages : 527
Age : 41
Localisation : Carcassonne
Date d'inscription : 27/12/2015

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Stef le Mer 16 Jan 2019 - 10:01

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é Wink
Stef
Stef
Infirmier

Masculin Nombre de messages : 4689
Age : 39
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par tetsuro le Ven 18 Jan 2019 - 2:22

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 !
tetsuro
tetsuro
Patient contaminé

Masculin Nombre de messages : 527
Age : 41
Localisation : Carcassonne
Date d'inscription : 27/12/2015

Revenir en haut Aller en bas

Re: Nouveau petit projet SGDK

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum