![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
Ouvrir sur le forum | Recherche | Messages du jour | Marquer les forums comme lus |
Aide au développement Aide sur l'utilisation d'OSLib |
Publicité |
![]() |
|
Outils de la discussion | Modes d'affichage |
![]() |
#1 |
Membre
Date d'inscription: 24/08/2008
Messages: 8
|
![]() Bonjour Ã* tous !
Je souhaiterais tout d'abord remercier Brunni pour son OSLib ![]() Par contre, je rencontre un petit problème vraiment très étrange. ![]() Comme vous le voyez une zone noire (surlignée en rouge) s'est incrustée Ã* l'écran ! Et en plus quand mon perso va dedans, la zone le recouvre, alors que la dernière chose que je blite est mon perso ... Voici le petit code (pour l'instant ![]() Code:
#include <oslib/oslib.h> //Callbacks PSP_MODULE_INFO("...", 0, 1, 1); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); OSL_IMAGE *fond, *perso; typedef struct{ int x; int y; int live; }Infos; void Move_Perso(Infos* acteur) { oslReadKeys(); if (osl_keys->held.right) { acteur->x += 3; } else if (osl_keys->held.left) { acteur->x -= 3; } else if (osl_keys->held.up) { acteur->y -= 3; } else if (osl_keys->held.down) { acteur->y += 3; } } int Random(int _iMin, int _iMax) { return (_iMin + (rand () % (_iMax-_iMin+1))); } int main() { //Initialise l'OSLib oslInit(0); oslInitGfx(OSL_PF_8888, 0); oslInitConsole(); //Configure les Touches oslSetKeyAutorepeatInit(40); oslSetKeyAutorepeatInterval(10); oslSetTransparentColor(RGB(255,0,255)); //Charge les images fond = oslLoadImageFile("back.png", OSL_IN_RAM, OSL_PF_8888); perso = oslLoadImageFile("perso.png", OSL_IN_RAM, OSL_PF_8888); oslDisableTransparentColor(); if (!fond || !perso) oslFatalError("Une des images n'a pas pu etre chargée."); Infos Perso; srand((unsigned)time( NULL )); // Utile pour le Random //Variables servants au stafield float size = 200; float zMax = 5; float speed = 0.1; int width = 480; int height = 272; //Structure des étoiles typedef struct{ float x; float y; float z; }star; star starfield[200]; //Fonction qui crée les étoiles void CreateStar(int i) { starfield[i].x = Random(1,width*2) - width; starfield[i].y = Random(1,height*2) - height; starfield[i].z = zMax; } float x=0; float y=0; long j; for (j = 1; j < size; j++) { CreateStar(j); starfield[j].z = Random(1,zMax); } //Boucle while (!osl_quit) { oslReadKeys(); oslStartDrawing(); oslClearScreen(RGB(0,0,0)); oslDrawImageXY(fond,0,0); for (j = 1; j < size; j++) { starfield[j].z = starfield[j].z - speed; if (starfield[j].z < speed) CreateStar(j); x = width/2 + starfield[j].x / starfield[j].z; y = height/2 + starfield[j].y / starfield[j].z; if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) { CreateStar(j); } else { oslDrawFillRect( x, y, x + 1, y + 1,RGB(255,255,255)); } } oslDrawImageXY(perso,Perso.x,Perso.y); Move_Perso(&Perso); oslEndDrawing(); oslSyncFrame(); } //Fin while oslEndGfx(); oslQuit(); return 0; } Merci d'avance ! Dernière modification par Dr.Vince ; 26/08/2008 à 15h20. |
![]() |
![]() |
Publicité |
![]() |
#2 |
Super Modérateur
Date d'inscription: 10/11/2005
Localisation: Un pays avec beaucoup de banques
Messages: 3 229
|
![]() Ton problème vient très certainement du fait que tu n'as pas activé le double buffering: oslInitGfx(pixelFormat, 1)
Sans double buffering le balayage de l'écran risque de commencer alors que l'affichage n'a pas encore terminé, ce qui provoque généralement des clignotements ou des zones vides (de la couleur de fond). Le double buffering permet de dessiner sur un écran virtuel (pas affiché) plutôt que directement sur l'écran, et cet écran virtuel est transféré vers l'écran "réel" une fois le dessin terminé. L'écran n'affichera donc jamais de dessin "pas terminé", comme ici. |
![]() |
![]() |
![]() |
#3 |
Membre confirmé
Date d'inscription: 10/11/2005
Messages: 367
|
![]() Moi je dirais une face avec des coordonnées qui "explosent"->overflow ou un Z faux.
Mais bon je ne suis ni un specialiste de la PSP ni d'OSLib ![]() [edit:] Grillé par Brunni ![]() Par contre, si c'était un probleme de refresh d'ecran, ca ferait une bande horizontale, pas en diagonale !? non ?
__________________
Mes releases persos, etc... |
![]() |
![]() |
![]() |
#4 |
Membre
Date d'inscription: 24/08/2008
Messages: 8
|
![]() Merci beaucoup Brunni, ça fonctionne parfaitement !
Foxy, en fait la bande qui recouvrait mon perso était horizontale, c'était simplement la zone noire qui était en diagonale ![]() |
![]() |
![]() |
![]() |
#5 |
Super Modérateur
Date d'inscription: 10/11/2005
Localisation: Un pays avec beaucoup de banques
Messages: 3 229
|
![]() Non, si la bande est diagonale, c'est parce que le blitting de l'arrière plan se fait de gauche Ã* droite Ã* cause du stripping (le GPU de la PSP est plus efficace en dessinant les images par bandes de 64 pixels de large), du coup dès les premières lignes la gauche de l'arrière-plan est disponible, mais la droite étant dessinée vers la fin, elle n'est disponible que quelques lignes plus tard, d'où cet effet de diagonale
![]() En l'occurence si la diagonale est autant prononcée, ça veut dire que le blitting est très lent. Pense Ã* swizzler tes images ![]()
__________________
[10.12.2018] PatrickBoy: codez vos jeux avec la puissance d'une borne d'arcade 16 bits! [21.01.2010] Emu Game Boy et GUI pour la coloration de jeux GB Partagez vos meilleures musiques de jeu vidéo! ![]() ![]() ![]() Dernière modification par Brunni ; 26/08/2008 à 15h24. |
![]() |
![]() |
![]() |
#6 |
Membre confirmé
Date d'inscription: 10/11/2005
Messages: 367
|
![]() Ah ok, c'est marrant comme mode de fonctionnement.
Je ne connaissais pas, mais maintenant que tu le dis, en effet l'effet refresh est evident ![]()
__________________
Mes releases persos, etc... |
![]() |
![]() |
![]() |
#7 |
Membre
Date d'inscription: 24/08/2008
Messages: 8
|
![]() Merci pour tes conseils Brunni
![]() |
![]() |
![]() |
![]() |
Liens sociaux |
Publicité |
Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
Outils de la discussion | |
Modes d'affichage | |
|
|
![]() |
||||
Discussion | Auteur | Forum | Réponses | Dernier message |
![]() |
dolarcles | Jeux | 10 | 05/10/2007 21h56 |
Bug dans ndstool | deufeufeu | [NDS] Divers | 1 | 09/05/2007 20h18 |
![]() |
Shideneyu | Archives - Divers (NDS) | 1 | 01/02/2007 23h15 |
Problème d'affichage sur DSL jap avec ACWW | Seruko | [NDS] Divers | 12 | 20/07/2006 10h25 |
![]() |
samy2910 | Archives - Divers (NDS) | 2 | 14/04/2006 14h48 |