:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Forums Hébergés :: > OldSchool Library > Aide au développement

Aide au développement Aide sur l'utilisation d'OSLib

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 30/10/2007, 21h38   #1
Cpasjuste
Membre
 
Date d'inscription: 22/08/2006
Messages: 11
Par défaut Scrolling text ?

Hi, i would like to make a scrolling in my app (not an image) like scroll from x to x and loop, does someone have a sample to provide ? I'm not sure how to do this, and i don't find any c c++ sample on google.

Salut, je voudrais faire défiler du texte (et non une image) dans mon application, défiler du texte d'une coordonnée à une autre (horizontale) et faire une boucle avec ce texte. Quelqu'un aurait un exemple ?

Merci
Cpasjuste est déconnecté   Réponse avec citation

Publicité

Vieux 30/10/2007, 22h34   #2
Yodajr
Administrateur
 
Date d'inscription: 09/11/2005
Messages: 3 750
Par défaut

Nan pas d'exemple (à part mon stroke, dans le générique de fin je fait défiler du texte verticalement) mais c'est très simple :

Code PHP:
oslPrintf_xy dep_x20"hello" );
dep_x++; 
dans ta boucle va défiler hello de gauche à droite
Yodajr est déconnecté   Réponse avec citation
Vieux 30/10/2007, 22h47   #3
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

je t'ai bricolé un petit quelque chose regarde si c'est ce que tu veux:
http://www.box.net/shared/2bqo5vci07

Edit: ah Yodajr a été plus rapide .

Dernière modification par daaa57150 ; 31/10/2007 à 08h42.
daaa57150 est déconnecté   Réponse avec citation
Vieux 30/10/2007, 23h15   #4
Cpasjuste
Membre
 
Date d'inscription: 22/08/2006
Messages: 11
Par défaut

Ok, merci à vous deux pour les réponses rapides

Par contre j'aurais du préciser que j'ai déja quelques bases en c, je sais comment incrémenter une variable, ce que je veux faire n'est pas si simple mais je me suis surement mal expliqué.

Admettons que j'ai une boite de dialogue de 30 : "x1 = 20, x2 = 50", comment faire un scrolling dans cette boite, car la nous ne pouvons pas aller jusqu'à "x=-200" pour faire disparaitre le texte. Je suppose que je vais devoir travailler charactère par caractère. De plus la taille du texte peut varier, donc ça complique un peu les choses.

En fait je n'ai pas encore bcp pensé à ceci mais je me suis dis que peut-être quelqu'un avait du code tout prêt

Merci encore pour le temps que vous avez passé, surtout toi daaa57150 qui a fait un joli code tout bien commenté! Je vous posterais mon code si j'y arrive, je vais voir ça demain.

Ps daaa57150 : pour améliorer un peu ton code on pourrait faire un truc du genre:

Code:
                int i = strlen(texte)-strlen(texte)*2;

		if(x<=i) //faut que le texte disparaisse entierement
		{
			x=480;
		}
Si je n'arrive pas ou n'ai pas le courage d'écrire ce que je souhaite, je me servirais surement de ça avec une petite image pour cacher mon texte à droite (pour qu'il ne soit visible qu'à x=300 par exemple).

Dernière modification par Cpasjuste ; 30/10/2007 à 23h37.
Cpasjuste est déconnecté   Réponse avec citation
Vieux 31/10/2007, 00h02   #5
thoduv
Membre confirmé
 
Date d'inscription: 10/11/2005
Localisation: ...
Messages: 1 464
Par défaut

<Message HS, mais pas moyen de le supprimer: j'avais mal compris le problème>
__________________
"S'il n'y a pas de solutions c'est qu'il n'y a pas de problème ..."
< mon devblog > ... < Lapinou Jumps ! - un jeu de plate-forme "vertical" avec un mignon petit lapin. >

Dernière modification par thoduv ; 31/10/2007 à 00h04. Motif: HS
thoduv est déconnecté   Réponse avec citation
Vieux 31/10/2007, 10h32   #6
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

Citation:
Envoyé par Cpasjuste Voir le message
En fait je n'ai pas encore bcp pensé à ceci mais je me suis dis que peut-être quelqu'un avait du code tout prêt
J'ai du code -presque- tout prêt pour faire des trucs dans le genre mais c'est largement plus compliqué qu'un drawstring.
Je fais "défiler" du texte de bas en haut et inversement dans le menu de mon projet actuel qui donne l'impression d'une "boîte" invisible, je crois que c'est ce que tu veux mais des cotés.

Mais ca implique plusieurs choses:
- il faut utiliser mon système de font bitmap (fabrication avec bitmap font builder), qui permet les accents cela dit.
- ca va créer une image dynamiquement avec le texte qui ne peut pas être antialiasé (pixels pleins ou vides, pas de gestion de transparence partielle)
- utilsation de ma bibliothèque d'effets (peut-être pas évident à comprendre, mais ca fonctionne bien)
- je n'ai pas écrit les effets d'apparirition/disparition droite et gauche (uniquement haut et bas donc je peux les ecrire très rapidement, c'est pareil, et de toute facon j'en aurait besoin tôt ou tard je pense).

Si tu veux jeter un coup d'oeil sur la demo DJ Drops tu verras le menu, et le code source est fourni si tu veux essayer. Si ca t'intéresse (tu es prêt à accepter toutes ces contraintes) je peux essayer de te compiler un petit exemple un de ces 4.

A mon avis c'est un peu "énorme" comme solution pour uniquement faire défiler un texte, mais tout ce code permet d'appliquer toutes sortes d'effets à des images, et de créer des images contenant du texte (ascii etendu) avec n'importe quelle police, si ca se trouve ca t'intéresse...
daaa57150 est déconnecté   Réponse avec citation
Vieux 31/10/2007, 14h04   #7
Cpasjuste
Membre
 
Date d'inscription: 22/08/2006
Messages: 11
Par défaut

Ouep ça me botte bien tout ça je peux tester, par contre c'est quoi la bibliotheque dont tu parles ?

Edit : ok j'ai trouvé, je vais utiliser ta lib pour le texte bitmap ça peut être sympa pour l'utilisateur (faire des fonts plus simplement qu'avec les .oft) et voir ce que je peux faire avec.

Dernière modification par Cpasjuste ; 31/10/2007 à 14h14.
Cpasjuste est déconnecté   Réponse avec citation
Vieux 31/10/2007, 15h10   #8
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

Effectivement je dis "lib" mais en réalité c'est plutot un ensemble de classes à copier coller dans ton code. Tu les as trouvées donc tout va bien

J'espère que tu comprendras facilement comment tout ca fonctionne en regardant mon code (MainMenu.cpp est intéressant, ainsi que MenuItem.cpp). J'ai bien l'intention de faire des exemples pour chaque chose dans mon code un jour mais j'ai pas encore pris le temps, notamment parce que ca évolue encore et que c'est pas toujours très joli.

N'hésite pas à me demander de l'aide je passe assez souvent sur le forum.
daaa57150 est déconnecté   Réponse avec citation
Vieux 02/11/2007, 00h36   #9
Cpasjuste
Membre
 
Date d'inscription: 22/08/2006
Messages: 11
Par défaut

Pour le scrolling c'est bon, mais je ne cracherais pas sur des exemples concernant les fichiers de configuration (ini), le header de ta lib est plutot clair mais ça me ferais surement gagner du temps
Cpasjuste est déconnecté   Réponse avec citation
Vieux 02/11/2007, 06h50   #10
Nesgba
Membre confirmé
 
Date d'inscription: 10/11/2005
Messages: 830
Par défaut

Citation:
int i = strlen(texte)-strlen(texte)*2;
Nesgba est déconnecté   Réponse avec citation
Vieux 02/11/2007, 10h42   #11
Arialia
Elite
 
Date d'inscription: 10/04/2006
Localisation: Pays de la moutarde
Messages: 901
Par défaut

la formule est juste Nesgba mais un peu gourmand en opération
je le verrais plutôt comme ça :
Code:
int i = - strlen(texte);
je suis plus sure que l'on peut l'écrire comme ça en c

donc aussi comme cela :
Code:
int i = -1 * strlen(texte);
__________________
Mon blog de dev - - Mon tutoriel sur la libfat -- DSPhoto
Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions
Il est impossible de tout savoir
28.59848% au Geek Test
Arialia est déconnecté   Réponse avec citation
Vieux 02/11/2007, 12h26   #12
Nesgba
Membre confirmé
 
Date d'inscription: 10/11/2005
Messages: 830
Par défaut

aussi en version "boole friendly"
Code:
int i = (~strlen(texte))+1 ;
Nesgba est déconnecté   Réponse avec citation
Vieux 02/11/2007, 15h16   #13
daaa57150
Membre confirmé
 
Date d'inscription: 16/05/2007
Messages: 411
Voir l'identifiant PSN
Par défaut

Citation:
Envoyé par Cpasjuste Voir le message
Pour le scrolling c'est bon, mais je ne cracherais pas sur des exemples concernant les fichiers de configuration (ini), le header de ta lib est plutot clair mais ça me ferais surement gagner du temps
Si tu parles des fichiers "bytes.ini" et "chars.ini", il ne faut pas les modifier ils sont chargés pour configurer les BmpFont. Par contre je viens de voir que je n'ai pas écrit de fonction de configuration donc ils doivent se trouver dans le dossier "res/fonts/bmpFonts/", tu peux changer ca dans le fichier BmpFont.cpp lignes 51 et 73.
Ensuite pour fabriquer une BmpFont, il faut utiliser Bitmap Font Builder: http://www.lmnopc.com/bitmapfontbuil...lder-download/
Tu fabriques ta police et l'enregistres en bmp, et tu sauvegarde les tailles: file->save font width (ini). Après ca tu convertis le bmp en png (et accessoirement tu vires le fond pour qu'il soit transparent), tu mets les 2 fichiers dans un dossier et tu les nommes avec le même nom (mapolice.png, mapolice.ini).

ensuite dans le code:
Code PHP:
//a appeler avant tout travail sur les BmpFonts,
//charge les fichiers ini et les met en memoire (static)
BmpFont::initBmpFont(); 

//on crée une instance d'une BmpFont:
BmpFont mapolice=new BmpFont("res/fonts/bmpFonts/mapolice/""mapolice"OSL_PF_4444);
//ira charger "res/fonts/bmpFonts/mapolice/mapolice.png" ainsi que "res/fonts/bmpFonts/mapolice/mapolice.ini"

//on crée un texte avec cette police:
BmpText montexte=new BmpText("mon texte!"mapolice);

//après, soit on utilise le BmpText pour l'écrire ou on veut (demande si tu veux des explications),
//soit on le compile pour en tirer une image comme ca:
montexte->compile();
OSL_IMAGE monimage=montexte->createSwizzledImageCopy();

//maintenant on peut virer le texte et la police si on s'en sert plus
delete montexte;
delete mapolice;

//si on ne travaille plus du tout avec des fonts, on peut libérer les ressources
BmpFont::freeRes(); 
Et voila t'as une image avec ton texte écrit dessus.
Avec cette méthode comme je disais, le texte ne peut pas être antialiasé. Si tu veux une font antialiasée, il faut utiliser le BmpText pour qu'il se dessine où tu veux, c'est à dire utiliser notre image png et dessiner un derrière l'autre chaque caractère, et là, pas moyen d'appliquer d'effets (un déplacement par contre pas de prob).
Note que pour que tu n'aies pas de mauvaise surprise avec les caractères accentués, tes sources doivent être écrits en UTF-8 et si tu vas lire des chaînes de caractères dans un fichier, ce fichier doit aussi être en UTF-8.

Si tu t'en sors pas j'essaie de me trouver un peu de temps pour te compiler un exemple.

Désolé c'est super mal écrit le code des BmpFonts mais je l'ai écrit en vitesse et suis passé à autre chose après.

Dernière modification par daaa57150 ; 02/11/2007 à 15h19.
daaa57150 est déconnecté   Réponse avec citation
Vieux 02/11/2007, 16h55   #14
Cpasjuste
Membre
 
Date d'inscription: 22/08/2006
Messages: 11
Par défaut

Re !

Pour le scrolling il y avait une petite erreur, je n'avais pas pensé qu'un char != à un pixel

Donc un voici le code que j'utilise pour faire une sorte de barre de tache avec une "boite" dedans ou le texte défile. Pour masquer le texte à droite et à gauche de la boite de dialogue j'affiche juste la partie gauche et droite de la barre après le scrolling.

En gros :

Code:
void blitScroll(char *msg)
{

	strlen_scroll = strlen(msg)-(strlen(msg)*10);
	if(text_scroll_x<=strlen_scroll) text_scroll_x=200;
	oslDrawString(text_scroll_x, text_scroll_y, msg);
	text_scroll_x--;

}

void blitGui()
{
	oslDrawImage(info_bar_center);
        blitScroll("Whaoouuu");
	oslDrawImage(info_bar_left);
	oslDrawImage(info_bar_right);
}
Sinon pour les fichiers ini, c'est encore une fois plus compliqué que ça
J'ai déja tout qui fonctionne avec du code que j'ai fait pour lire un fichier de configuration (pour un shell sur psp) avec le chemin des homebrews (eboot) ainsi qu'un icon à charger au format png. Au démarrage je lis donc ce fichier puis affiche tous les icones. Cependant cela implique que l'utilisateur doit remplir à les main tous les chemins d'accès à ces homebrews.

Ce que je veux faire si j'ai le courage, c'est à l'aide d'un gestionnaire de fichiers sur la psp (un filer qui est déja intégré à mon shell) ajouter les homebrews à la volé dans un fichier de configuration seulement en cliquant une fois dessus.

Voici une petite vidéo de ce que ça donne pour l'instant :

http://mydedibox.fr/crap/mypspmenu2.avi
Cpasjuste est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h39.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince