Texte sur image de fond

Démarré par juef, 03 Août 2012 à 16:48:12

« précédent - suivant »

0 Membres et 1 Invité sur ce sujet

juef

Bonjour!
Je n'arrive pas ? mettre du texte par-dessus un background en mode 1 contenant une image, et j'apprécierais beaucoup un peu d'aide.

  • Si je mets mon image de fond et mon texte sur le m?me background (0), alors je ne vois pas le texte, m?me si j'appelle consoleDrawText apr?s bgInitTileSet et bgInitMapSet.
  • Si je mets mon image de fond sur BG0 et mon texte sur BG1, je peux discerner mon texte mais il y a beaucoup de garbage. En fait, il y en a d?s que je ne désactive pas BG1, m?me si je ne mets pas de texte. Est-ce que je dois "vider" la VRAM ou un truc du genre?
Je peux évidemment attendre la suite des tutoriels sur le Wiki, j'ai l'impression que j'en ai encore beeeeeeeaucoup ? apprendre :)
Merci beaucoup!

alekmaul

Les fonts pour les textes sont chargées sur le début de la mémoire VRAM, donc en 0x0000. Ton pb de garbage vient peut ?tre de l? .
Pour pouvoir t'aider, il me faudrait un extrait de ton code source, ça serait plus simple.

ccc

Juef en prenant comme base l'example Mode 1 Scroll http://www.portabledev.com/media/SNES/PVSnesLib/doc/a00003.html#a2 j'ai réussi ? coller du texte par dessus une image.
Il me reste des petites difficultées vis-?-vis de la couleur de celui ci (mon texte tout blanc est devenu noir puis vert apr?s bidouillage de la palette).
Il faut faire attention ? ne pas mettre le texte sur le m?me BG (0 pour le texte et 1 pour le fond/map dans l'exemple) et comme le dit alekmaul ? ne pas réécrire sur des choses déj? existantes en mémoire.

juef

Merci ? vous deux pour vos réponses!

ccc: j'ai aussi des difficultés avec la palette et la couleur du texte. Si tu trouves quelque chose, je te prie de m'en faire part :)

alekmaul: c'est vrai que ça irait mieux! Si ça peut aider, je remarque que si je change mon image de fond (par exemple par celle de tes exemples en Mode 1), ça fonctionne. Mon image .bmp est en 8 bpp et board.pic fait 24 ko.

Code (test.c) Sélectionner
#include <snes.h>

extern char patterns, patterns_end;
extern char palette, palette_end;
extern char map, map_end;
extern char snesfont;

int main(void)
{
consoleInit();
consoleInitText(0, 0, &snesfont);

bgInitTileSet(1, &patterns, &palette, 0, (&patterns_end - &patterns), (&palette_end - &palette), BG_16COLORS, 0x4000);
bgInitMapSet(1, &map, (&map_end - &map), SC_32x32, 0x0000); // J'ai essayé de changer 0x0000 par 0x4000 ou 0x8000 mais ce n'est gu?re mieux...
consoleDrawText(10, 26, "This is a test!");

setMode(BG_MODE1,0);
bgSetDisable(2);

setBrightness(0xF);
while(1)
{
WaitForVBlank();
}
return 0;
}


Code (data.asm) Sélectionner
.include "hdr.asm"

.section ".rodata2" superfree

patterns:
.incbin "board.pic"
patterns_end:

.ends

.section ".rodata3" superfree

map:
.incbin "board.map"
map_end:

palette:
.incbin "board.pal"
palette_end:

snesfont:
.incbin "pvsneslibfont.pic"
snesfont_end:

.ends

ccc

Salut Juef,

bgInitTileSet(1, &patterns, &palette, 0, (&patterns_end - &patterns), (&palette_end - &palette), BG_16COLORS, 0x4000);
bgInitMapSet(1, &map, (&map_end - &map), SC_32x32, 0x0000); // J'ai essayé de changer 0x0000 par 0x4000 ou 0x8000 mais ce n'est gu?re mieux..


Ici tu initialises la Map en 0x0000. Ca ne doit pas ?tre bon car comme le disait alekmaul en 0x0000 c'est l'adresse o? sont stockées les caract?res. Reprend plutôt comme base, au moins pour les adresses, celle donnée dans l'exemple que j'ai cité :0x1000.

Pour les couleurs du texte je n'ai pas encore essayé mais en faisait quelque chose comme ça :
consoleSetTextCol(RGB15(0,0,0), RGB15(31,31,31));
On devrait réussir ? obtenir quelque chose.

juef

Merci ccc pour ta réponse :)

J'aurais juré avoir essayé 0x1000 mais il semblerait bien que non, puisqu'effectivement, ça marche! Mais je suis un peu m?lé alors; j'avais essayé 0x4000 et 0x8000 car dans certains modes, ça doit ?tre aligné au 0x4000 pr?s. Mais dans ce cas-ci, 0x4000 et 0x8000 affichent aussi du garbage; pourtant, je suis bien loin de l'adresse de la police de caract?res, non?

ccc

Le probl?me ? mon avis de 0x4000 c'est que tu as déj? les Tiles ? cette adresse !
Pour le 0x8000 par contre l? je n'ai pas d'idée, je suis pas encore parfaitement au point avec la mémoire de la snes  :-[

alekmaul

0x8000 depasse le max autorisé. On peut pas aller au dela de 0x7fff.

Pour info, une nouvelle version de PVSnesLib est en approche, mais juste des bugs fixs, pas de nouveautés ( pas eu trop le temps avec le real staff et la neocompo ces derniers temps)