developper sur SNES avec pvsneslib !

Page 4 sur 5 Précédent  1, 2, 3, 4, 5  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Mar 14 Nov 2017 - 1:54

Bon j'avance doucement, à mon rythme (le weekend quoi), mais j'avance :).

Je me retrouve un peu bloqué par la gestion des background et du texte, et du coup j'ai 3 nouvelles questions:

- Comment faire pour qu'un Sprite apparaisse "progressivement" depuis la gauche de l'écran. En affectant des valeur en X et Y des sprites (via oamSetXY), j'arrive bien à déplacer des sprites en dehors de l'écran par le haut, le bas et la droite. Et on peut donner l'illusion qu'il arrivent de dehors / d'un scrolling. Par contre, dès que je leur donne une position X < 0, ils se téléportent à droite de l'écran, impossible donc de les faire apparaitre progressivement par ce coté.

Je sais que c'est possible car Alekmaul l'a fait par exemple dans Uwol (le perso peut être visible "en partie" à gauche comme à droite de l'écran), mais j'arrive pas à savoir comment ?

- Pour les tiles du background, j'ai dessiné une tile de 32x32 pixels. Comment arriver à l'afficher sur tout l'écran?

- Enfin, je n'arrive pas à faire marcher le moteur de texte. J'arrive bien à compiler les exemples fournis avec la lib, mais une fois dans mon jeu, les fonctions initSetText et autres ne font qu'ajouter du "déchet" graphique. On dirait que la lib n'arrive pas à charger les données graphiques du texte, mais trouve des données "corrompues" à la place (en tout cas, la font n'apparait pas dans la VRAM en utilisant no$sns). J'ai testé en prenant le fichier pvsneslibfont.pic directement d'un exemple qui marche, ça fait pareil.
Une idée de la source potentielle du problème ?

Merci encore pour votre aide !

drludos
Patient en incubation

Nombre de messages : 64
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par TOUKO le Mar 14 Nov 2017 - 11:12

contre, dès que je leur donne une position X < 0, ils se téléportent à droite de l'écran, impossible donc de les faire apparaitre progressivement par ce coté.
Un peu normal je dirai, X<0,on va dire -1 ,c'est 255, donc à droite(sinon impossible de dépasser les 127 sur ton écran) .
Je dirai que X doit être sur 16 bits (et non 8), donc déclaré en int si tu veux le faire sortir de l'écran (gauche ou droite) .

Et je pense qu'une valeur  inférieure à 65535 ou $FFFF devrait marcher .
avatar
TOUKO
Interne
Interne

Masculin Nombre de messages : 12523
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par upsilandre le Mar 14 Nov 2017 - 12:44

Faut dire que l'OAM de la SNES c'est une cata par rapport a une Megadrive (ou une PCE).
avatar
upsilandre
Patient incurable

Masculin Nombre de messages : 1848
Age : 42
Localisation : val de marne 94
Date d'inscription : 31/05/2015

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par alekmaul le Mar 14 Nov 2017 - 13:26

@drludos a écrit:
- Comment faire pour qu'un Sprite apparaisse "progressivement" depuis la gauche de l'écran. En affectant des valeur en X et Y des sprites (via oamSetXY), j'arrive bien à déplacer des sprites en dehors de l'écran par le haut, le bas et la droite. Et on peut donner l'illusion qu'il arrivent de dehors / d'un scrolling. Par contre, dès que je leur donne une position X < 0, ils se téléportent à droite de l'écran, impossible donc de les faire apparaitre progressivement par ce coté.
Es tu certain que la variable qui gère la coordonnée de ton sprite en X est bien de type signed short ?

alekmaul
Patient contaminé

Masculin Nombre de messages : 415
Age : 50
Localisation : Blois
Date d'inscription : 02/11/2014

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Stef le Mar 14 Nov 2017 - 14:51

@alekmaul a écrit:Es tu certain que la variable qui gère la coordonnée de ton sprite en X est bien de type signed short ?

Je dirais que théoriquement il faut juste du short (signed ou unsigned qu'importe), si tu fais x -= 20 sur un unsigned short < 20 alors il va passer à 655xx, ce qui sera bien interprété comme une valeur négative au final dans l'OAM.
Je pense qu'il doit utiliser du byte actuellement d'où le problème.

Sinon dans ta doc je vois que la fonction est définie comme :
void oamSetXY(u16 id, u16 xspr, u16 yspr)

Le fait d'utiliser des u16 ne change en réalité pas grand chose mais pour le développeur je pense que des s16 serait plus logique (car la position peut effectivement être < 0), d'ailleurs j'avais fait la même chose dans SGDK au début Razz
avatar
Stef
Infirmier

Masculin Nombre de messages : 3702
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Mar 14 Nov 2017 - 15:16

Merci à tous pour vos suggestions !

Ma variable de position X est bien en signed short. J'ai aussi essayé de la mettre en int, et dans le deux cas ça ne change rien. J'ai l'impression que c'est l'OAM qui, dès qu'on lui donne une valeur < 0 en X, bascule automatiquement sur 255. Ca me fait pareil que j'utilise oamSet ou oamSetXY.

Pour info, j'utilise la version 2.3.0 de la lib, et non la dernière version, comme suggéré sur le gitHub pour éviter le bug de "les examples se compilent mais rien ne s'affiche à l'écran". Donc peut-être que c'est un bug qui a été corrigé depuis ?

-------------

Sinon, j'ai finalement réussi à trouver la solution à ma question 3, celle du texte qui ne s'affichait pas. C'était tout simplement lié à une "collision" d'adresse mémoire visiblement. En effet, je chargeais mes sprites en 0x0000, et apparemment le moteur de texte lui aussi charge la font à cette adresse. En passant l'adresse mémoire des sprites à 0x4000, le problème est résolu.

A ce propos, pourquoi faut-il que l'adresse de chargement en VRAM des sprites ou des tiles de backround soit alignée sur 4K?
(ce qui ne laisse que 4 adresses de départ donc si j'ai bien suivi : 0x0000, 0x4000, 0x8000, 0xC000)

drludos
Patient en incubation

Masculin Nombre de messages : 64
Age : 37
Localisation : 34
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Stef le Mar 14 Nov 2017 - 17:19

@drludos a écrit:Merci à tous pour vos suggestions !

Ma variable de position X est bien en signed short. J'ai aussi essayé de la mettre en int, et dans le deux cas ça ne change rien. J'ai l'impression que c'est l'OAM qui, dès qu'on lui donne une valeur < 0 en X, bascule automatiquement sur 255. Ca me fait pareil que j'utilise oamSet ou oamSetXY.

Pour info, j'utilise la version 2.3.0 de la lib, et non la dernière version, comme suggéré sur le gitHub pour éviter le bug de "les examples se compilent mais rien ne s'affiche à l'écran". Donc peut-être que c'est un bug qui a été corrigé depuis ?

Ca m'étonnerait mais peut être que la fonction ne met pas à jour le 9eme bit de la position X (qui se trouve dans la HIGH OAM) et qu'il faut utiliser une autre fonction pour ça ?
avatar
Stef
Infirmier

Masculin Nombre de messages : 3702
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Mar 14 Nov 2017 - 23:59

Je confirme ce que je disais par rapport aux fonctions oamSet() et oamSetXY().

J'ai repris un fichier "vide" pour faire d'autres tests (pour éviter que ce soit un autre élément de mon futur jeu qui cause le pb). En affectant directement une valeur négative en X via un de ces deux fonctions, le sprite se téléporte du coté droit de l'écran. Il fait un "wrap", sans disparaitre d'abord progressivement du coté gauche.

Peut-être est-ce lié à ce que propose Stef?

En lisant le code source de la fonction oamSetXY, elle a l'air de modifier à la fois le "high bit" et le "low bit" de position, mais je dois avouer ne pas m'y connaitre assez sur l'architecture de la SNES pour savoir s'il y a éventuellement un bug dans cette fonction ou non.

Code:
void oamSetXYEx(unsigned int id, unsigned int x, unsigned char y) {
#define OAM_HI_TABLE_START 128*4

    // Set low byte of x position and y position:
    unsigned char x_lo = (unsigned char)x;
    oamSetXY(id,x,y);

    // Note that id isn't the OAM id, but a direct index into OAM shadow memory;
    // the result is that id/4 is the actual oam index, which is required for determining
    // the OAM high table position.
    unsigned char oam_id = (unsigned char)(id >> 2);

    // Set highest bit of x position: Either at bit 0,2,4,6 depending on oam id,
    // as 4 oam entries are merged into one byte of the OAM high table.
    int bit_shift = 2*(oam_id % 4);
    int in_byte_position = 1 << bit_shift;
    int oam_high_table_pos = OAM_HI_TABLE_START + oam_id / 4;
    oamMemory[oam_high_table_pos] &= ~in_byte_position; // Clear current high bit of x
    oamMemory[oam_high_table_pos] |= (x>>8)<<bit_shift; // Fill in new high bit of x
}

Ma seule hypothèse naïve serait que le pb viendrait peut-être du fait que la fonction reçoit une position X en "unsigned int" au lieu de "int", ce qui fait que le code permettant de déterminer s'il faut activer ou non le bit 9 déterminant le "signe" de la position X du sprite dans l'OAM ne marche pas?

drludos
Patient en incubation

Masculin Nombre de messages : 64
Age : 37
Localisation : 34
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Stef le Mer 15 Nov 2017 - 0:46

Le code de la fonction que tu montres c'est oamSetXYEx(..) qui elle même utilise oamSetXY(..), il faut donc que tu utilises oamSetXYEx(..) si tu veux que le bit de poids fort soit mis à jour dans la high OAM.
D'ailleurs j'espère que le %4 est bien optimisé par le compilateur (remplacé par un &3) sinon laisse tomber la catastrophe :p

Le unsigned / signed int ne change rien ici car il n'y a pas d'opération qui dépende du signe ici (ou plutot pas qui puisse faire une différence ici).
avatar
Stef
Infirmier

Masculin Nombre de messages : 3702
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par F.L le Mer 15 Nov 2017 - 10:29

hello
moi aussi ça avance doucement.
je suis enfin arrivé à afficher des variables à l'écran, youpi Razz
et j'ai aussi le meme probleme que drludos, quand mes valeurs deviennent negatives.
c'est bizarre ce sont les memes codes que sur pcengine et ça ne le faisait pas.
je vais essayer des if ( x <= 0 ) { x = 0 ; }
plutot que if ( x < 0 ) { x = 0 ; }
pour voir si ça resout le probleme
aussi, la compilation est longue chez moi....
bref, cette snes est dificile à dompter, mais le jeu en vaut la chandelle Razz
@+
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2459
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Mer 15 Nov 2017 - 21:53

Je me lance dans l'aventure également.
J'espère ne pas trop galérer pour afficher mes premières images.
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par tetsuro le Mer 15 Nov 2017 - 22:22

Je vous envie, j'aimerais me lancer dans l 'aventure aussi :)
Vous codez en quel langage ?
avatar
tetsuro
Patient contaminé

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

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Mer 15 Nov 2017 - 23:11

En C. Nous suivons le chemin tracé par Alekmaul.

Pour l'instant, j'essaye doucement de modifier les exemples pour arriver à un truc assez complet qui aurait du texte et des images.
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par F.L le Mer 15 Nov 2017 - 23:19

à l'heure actuelle c'est le seul compilo en C pour la snes
et c'est un français qui l'a fait. cocorico Mr. Green
alekmaul a dit que dès qu'il aurait un peu de temps il mettrait à jour pour corriger qq defauts
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2459
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Jeu 16 Nov 2017 - 0:12

La snes est ma console préférée, j'aimerais vraiment pouvoir dev quelques bricoles dessus.

J'ai le même soucis que vous concernant les positions négatives qui ne sont pas prises en compte (disparition du sprite pour revenir s'afficher à droite).
Je n'arrive pas à comprendre ce phénomène. Lorsqu'un sprite passe à une position X négative, il "saute" à 256. Chose qui n'est pas vrai en Y...
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Stef le Jeu 16 Nov 2017 - 10:37

Vous utilisez oamSetXY(..) ou oamSetXYEx(..) ?
A priori il faut utiliser la seconde fonction...
avatar
Stef
Infirmier

Masculin Nombre de messages : 3702
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Jeu 16 Nov 2017 - 17:21

Est-ce que vous parvenez tous à voir l'exemple du mario ? Moi je n'ai que le son pour l'instant. En modifiant le code pour forcer la visibilité peut être ? 
Le wiki du site est très bien fait bien qu'en anglais ce soit moins évident. Hâte qu'n ai la suite des articles. Comment afficher un fond etc...mais déjà si on parvient à décortiquer l'exemple de mario...
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Jeu 16 Nov 2017 - 17:42

@Stef a écrit:Vous utilisez oamSetXY(..) ou oamSetXYEx(..) ?
A priori il faut utiliser la seconde fonction...

Alors, visiblement, avec oamSetXYEx ça ne marche pas mieux.
Voici ce que j'obtiens en utilisant cette fonction:


Au lieu de téléporter le sprite à droite, celui-ci disparait effectivement progressivement. Par contre, du coup il s'affiche en triple quand on met un X < 0 en utilisant oamSetXYEx().

Je suis débutant en SNES, mais je pense que c'est peut-être un bug de la fonction, qui au lieu de modifier uniquement le bit de l'OAM qui contrôle le signe de la position X du sprite, il modifie sans doute aussi celui qui contrôle sa taille (le faisant passer de "SMALL" à "LARGE"). Cela qui expliquerai qu'il passe d'un affichage 8x8 à un affichage 16x16 lorsque le X < 0 (qui montre donc les deux autres sprites présents dans la VRAM).


Dernière édition par drludos le Jeu 16 Nov 2017 - 18:01, édité 1 fois

drludos
Patient en incubation

Masculin Nombre de messages : 64
Age : 37
Localisation : 34
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Jeu 16 Nov 2017 - 17:45

@Fax a écrit:Est-ce que vous parvenez tous à voir l'exemple du mario ? Moi je n'ai que le son pour l'instant. En modifiant le code pour forcer la visibilité peut être ? 
Le wiki du site est très bien fait bien qu'en anglais ce soit moins évident. Hâte qu'n ai la suite des articles. Comment afficher un fond etc...mais déjà si on parvient à décortiquer l'exemple de mario...

Bienvenue dans l'aventure SNES avec nous Fax :)!

Pour la PVSNESLib, oui, la dernière version est buggué et les exemples ne se compilent pas. C'est un problème connu que plusieurs personne ont rencontré: https://github.com/alekmaul/pvsneslib/issues/5

En attendant qu'il soit résolu, la solution est d'utiliser une version un peu plus ancienne de la librairie, qui marche impeccable :
http://www.portabledev.com/wiki/doku.php?id=currentversion_en

Avec cette version, j'arrive à compiler l'exemple "LikeMario" qui marche bien et sans pb.

C'est d'ailleurs avec cette "vieille" version que je travaille depuis le début.

Je crois que F.L. a réussi à faire marcher une version plus récente, dont tu peux récuperer le dossier "prêt à l'emploi" ici :
https://www.dropbox.com/s/g4gb2ypmdfqpihr/dossierSNESdEV.zip?dl=0

@Tetsuro: si tu veux te lancer, n'hésites pas à nous rejoindre ! A mon avis, c'est plus facile de coder un jeu SNES en C grâce à la super librairie d'Alekmaul, que de coder un jeu Atari ST en ASM Wink

drludos
Patient en incubation

Masculin Nombre de messages : 64
Age : 37
Localisation : 34
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Jeu 16 Nov 2017 - 18:03

J'ai déjà pris son dossier qui a fonctionné au poil sous Windows 10 d'ailleurs. Mais la plupart des exemples n'affichent rien. Probablement dû au bug qu'alekmaul à déjà répondu (visibilité des images à forcer).
Je vais tester un peu ce soir je vous redirai. Si avec la visibilité ça ne fonctionne pas je passerai à la vieille version.
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par F.L le Jeu 16 Nov 2017 - 20:08

Oui mon dossier n'affiche pas grand chose a part simple sprite avec une petite manip et celle du mode7
Pour la version ancienne, je l'ai essayée et elle ne marche pas mieux chez moi... mystere
Pourtant alekmaul a modifié son code pour afficher un background et ça marche avec mon dossier.
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2459
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Jeu 16 Nov 2017 - 20:44

Est-ce que tu sais ce qu'il a changé par hasard dans le code ? Car je t'avoue que pouvoir faire fonctionner l'exemple du mario m'aiderait grandement à comprendre ce qui cloche dans mon code à l'heure actuelle.
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par F.L le Jeu 16 Nov 2017 - 21:57

tu n'es pas le seul a vouloir l'exemple de mario qui marche !
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2459
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Jeu 16 Nov 2017 - 22:18

J'ai réussis à afficher le fond grâce à ce lien : https://github.com/alekmaul/pvsneslib/issues/5
Il suffit d'ajouter
Code:
setBrightness(0xF);

juste après 

Code:
// Wait VBL 'and update sprites too ;-) )
   WaitForVBlank();


Je constate que le personnage se situe en dehors de l'écran sur la droite et qu'on ne peux pas le faire "revenir" à l'écran.
C'est tout de même pas simple à comprendre tout ça.
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par alekmaul le Ven 17 Nov 2017 - 15:02

Promis, je reprends la lib au mois de décembre, trop de choses dans la real life ce mois ci.
Désolé Sad ....

alekmaul
Patient contaminé

Masculin Nombre de messages : 415
Age : 50
Localisation : Blois
Date d'inscription : 02/11/2014

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par F.L le Ven 17 Nov 2017 - 17:59

y'a pas de soucis ! c'est déja super d'avoir fait ce compilo sur snes !
au fait, j'ai enfin reussi à afficher une variable à l'écran pour mon debuggage  Razz lol!
avatar
F.L
Docteur *
Docteur *

Masculin Nombre de messages : 2459
Age : 42
Localisation : hérault
Date d'inscription : 11/06/2012

http://fl.basic.free.fr

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Fax le Ven 17 Nov 2017 - 22:33

Pour l'affichage d'une String ou d'une Variable y à le wiki qui l'explique.

J'attendrai que la lib soie un poil plus avancée pour continuer l'aventure. Mais ce sera avec ferveur et un réel plaisir ^^.

En attendant, je vous souhaite à tous de bonnes lignes de code !!

PS: Pas de soucis Alekmaul, c'est vraiment top ce que tu fais, on attendra le temps qu'il faut. Priorité à la vraie vie :).
avatar
Fax
Patient en incubation

Masculin Nombre de messages : 76
Age : 30
Localisation : Nancy
Date d'inscription : 03/05/2017

http://Www.terre-et-glace.com

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Ven 17 Nov 2017 - 22:56

Pas de problème Alekmaul, merci déjà énormément à toi d'avoir réaliser un lib aussi puissante et accessible !

S'il m'avait fallu passer par l'ASM j'en serais encore au code d'initialisation de la console. Alors que là j'ai déjà plein de sprites qui bougent à l'écran :)


Dernière édition par drludos le Sam 18 Nov 2017 - 1:43, édité 1 fois

drludos
Patient en incubation

Masculin Nombre de messages : 64
Age : 37
Localisation : 34
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par drludos le Sam 18 Nov 2017 - 1:40

J'ai encore une question technique, cette fois-ci liée à l'optimisation du code. En effet, dans mon jeu j'essaie d'afficher un max de sprites (16x16) qui bougent en même temps, mais dès que je dépasse la vingtaine ça commence à ralentir (entre les tests de collisions, les animations, etc).

Du coup j'essaie d'optimiser un peu mon code, et j'ai quelques questions à ce sujet :

- Pour la gestion de l'OAM, est-ce qu'il est plus rapide de faire:
=> un seul "OAMSet()" général pour chaque sprite toute les frames ?
=> ou par exemple un "OAMsetXY()" toutes les frames pour modifier uniquement la position, avec en plus un "OAMsetGFXOffset()" toutes les deux frames pour gérer l'animation ?

- J'utilise, pour gérer facilement tout mes sprites, un array de "struct", que je "traite" un à un dans une boucle for. J'ai lu dans la doc que le fait d'accéder à un tableau c'était lent, donc, au début de ma boucle for, j'utilise une variable de plus dans laquelle je copie le "struct" en cours (je copie le struct du tableau hein, je ne fait pas juste une référence / un pointeur dessus).
En clair, je ne fait un "sprite = sprites[ i ]" au début de ma boucle pour ne faire que des "++sprite.x" après au lieu de "++sprites[ i ].x".
Est-ce que cela permet vraiment d'optimiser le code, ou au contraire ça le ralenti ?

- Est-ce que le fait de déclarer toutes ses variables en "static" permet d'optimiser ou non ?
(sachant que je n'ai aucune variable déclarée dans mon main, elles sont toutes déclarées au niveau du script principal)

- Pour obtenir un nombre aléatoire entre 0 et 4, j'utilise rand() % 4, comme me l'a appris Alekmaul. Le "modulo" étant à priori une opération couteuse en CPY, est-ce qu'il y a une méthode pour générer une valeur aléatoire plus "optimisée" ?

drludos
Patient en incubation

Masculin Nombre de messages : 64
Age : 37
Localisation : 34
Date d'inscription : 12/10/2017

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par nemokantio le Sam 18 Nov 2017 - 9:43

Hello,

Pour le rand() % 4 cela donne une valeur entre 0 et 3.
Tu peux le remplacer par un rand() & 3.

Pour l'histoire plus haut du sprite qui s'affiche mal lorsque x<0, c'est peut être parce que le x est sur 9 bits.
Il faudrait essayer de faire un & 511 sur la coordonnée x avant d'appeler oamSetXY :
Code:
void oamSetXYEx(unsigned int id, unsigned int x, unsigned char y) {
#define OAM_HI_TABLE_START 128*4

    // Set low byte of x position and y position:
    unsigned char x_lo = (unsigned char)x;
    oamSetXY(id,x,y);

    // Note that id isn't the OAM id, but a direct index into OAM shadow memory;
    // the result is that id/4 is the actual oam index, which is required for determining
    // the OAM high table position.
    unsigned char oam_id = (unsigned char)(id >> 2);

    // Set highest bit of x position: Either at bit 0,2,4,6 depending on oam id,
    // as 4 oam entries are merged into one byte of the OAM high table.
    int bit_shift = 2*(oam_id % 4);
    int in_byte_position = 1 << bit_shift;
    int oam_high_table_pos = OAM_HI_TABLE_START + oam_id / 4;
    oamMemory[oam_high_table_pos] &= ~in_byte_position; // Clear current high bit of x
    //modif sur x ici
    oamMemory[oam_high_table_pos] |= ((x & 511)>>8)<<bit_shift; // Fill in new high bit of x
}

nemokantio
Patient contaminé

Masculin Nombre de messages : 270
Age : 42
Localisation : Delgastan
Date d'inscription : 23/01/2013

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par TOUKO le Sam 18 Nov 2017 - 11:32

mais dès que je dépasse la vingtaine ça commence à ralentir (entre les tests de collisions, les animations, etc)
En même temps 20 sprites animés qui doivent gérer les collisions entre eux,en C c'est pas anodin niveau ressource,encore plus sur snes .
avatar
TOUKO
Interne
Interne

Masculin Nombre de messages : 12523
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: developper sur SNES avec pvsneslib !

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 4 sur 5 Précédent  1, 2, 3, 4, 5  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut


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