| | Scrolling==> demande d'aide! | |
| | |
Auteur | Message |
---|
Bartours Invité
| Sujet: Scrolling==> demande d'aide! Mer 11 Jan à 13:11 | |
| Voila je me suis attaqué au scrolling, et franchement, je comprends pratiquement rien! Je me sers du tutorial du site, et je ne comprends pas pas mal de truc, donc j'aimerai qu'on m'explique: -Deja, premier truc super pas clair, je me demande comment faire pour que xoffset et yoffset prennent les coordonnées du coin superieur gauche du cadre... -Aussi, j'aimerai savoir comment faire cette map geante où se trouve le cadre.. Bon je pense que si on réponds deja à ça, je pourrais me débrouiller pour le reste! |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Mer 11 Jan à 15:37 | |
| Regarde cette image : Le monde est tout le dessin : il est tres grand : je t'ai donné, par exemple, les coordonnées : disons qu'il fait 99999*99999 pixels ! Je t'ai mis, sur certains points précis, avec le mot ABS, qui veut dire que c'est les coordonnées absolues, dans le monde : donc ça peut etre de grands nombres ! Comme tu vois, Xoffset et Yoffset représentent, dans le monde, les coordonnées du coin supérieur gauche du cadre écran. Pour répondre donc a ta 1ere question : "je me demande comment faire pour que xoffset et yoffset prennent les coordonnées du coin superieur gauche du cadre" --> xoffset et yoffset sont toujours les coordonnées du coin supérieur gauche du cadre. "j'aimerai savoir comment faire cette map geante où se trouve le cadre" --> a Xoffset, Yoffset J'espere que le schéma a pu t'aider ! Précise moi si ça ne va pas ou ça bloque ! | |
| | | Bartours Invité
| Sujet: Re: Scrolling==> demande d'aide! Ven 13 Jan à 5:17 | |
| Ouaip merci le petit schéma m'a pas mal aidé, mais pas suffisement pour que j'arrive à faire marcher mon truc. En fait, ce n'est pas assez détaillé pour me permettre de comprendre. Si je pouvais avoir un programme en C, sur une page, ça m'aiderait vachement mieux... Le truc du scrolling à la souris est je pense, pas suffisement clair. Faut-il utiliser la fonction 'abs' de la bibliothèque math.h pour les variables xoffset et yoffset? (vu que tu parles souvent de l'absolu!). Remarque, je pense qu'en me faisant un petit exemple comme je l'ai demandé, si toutefois le temps y est , il n'y aura pas besoin de répondre à mes questions... |
| | | Bartours Invité
| Sujet: Re: Scrolling==> demande d'aide! Ven 13 Jan à 5:27 | |
| Ah oui pis une petite question rapide sans rapport avec le scrolling mais je veux pas recréer un topic pour rien: Comment faire à partir de la fonction blit: void Blit(SDL_Surface* source,int x1,int y1,int x2,int y2,SDL_Surface* dest,int x3,int y3) { SDL_Rect S=Rect(x1,y1,x2-x1+1,y2-y1+1); SDL_Rect D=Rect(x3,y3,0,0); SDL_Rect* pS=&S; if (x1<0) pS=NULL; SDL_BlitSurface(source,pS,dest,&D); } écrire une ligne qui reviendrait au même que: SDL_BlitSurface(Image,NULL,ecran,NULL); Merci |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Ven 13 Jan à 6:08 | |
| il n 'y a pas besoin d'utiliser la fonction abs de math.h c'est simplement 2 systemes de coordonnées Je méditerai sur comment expliquer mieux. Pour ton soucis de SDL_Blit, met simplement x1 < 0 par exemple : Blit(source,-1,0,0,0,dest,x3,y3); J'ai chez moi une autre fonction blit pour ça qui fait s'appelle juste : Blit(source,dest,x3,y3); et qui fait ce que tu demandes Regarde dans mon fichier de promenade si le Futils la contient, sinon, son implémentation est tres tres simple : void Blit(SDL_Surface* source,SDL_Surface* dest,int x3,int y3) { SDL_Rect D=Rect(x3,y3,0,0); SDL_BlitSurface(source,NULL,dest,&D); } Le C++ te permet d'utiliser le meme nom pour cette fonction (meme nom que l'autre) et saura choisir la bonne en fonction de si tu as mis des x1 ou non | |
| | | Bartours Invité
| Sujet: Re: Scrolling==> demande d'aide! Ven 13 Jan à 12:14 | |
| Ok impec! merci En pratique, vaut mieux ajouter la fonction ou mettre -1? Pis je me demande un autre truc: Vaut-il mieux faire 6 'else' (donc après chaque structure) ou alors les remplacer par un tout petit 'si' (a la fin de mes 6 structures) qui revient au même? enfin c'est juste histoire de grignoter un peu de place ça fait mieux dans un programme! Sinon encore un dernier ptit truc (sans rapport avec le scrolling) mais qui est en rapport avec le tuto que je demandais sur les collisions: en utilisant la méthode boundig truc (celle que tu disais être la mieux), ça ne ferait pas faire beaucoup d'images, si par exemple on souhaite faire passer un personnage derrière une caisse? (en sachant que les hauteurs des caisses ne seront peut-être pas toujours les même, pis que il faut prévoir aussi quand il arrive par le coté gauche, de rogner la partie droite de son corp et ainsi de suite... j'ai un peu de mal a me représenter) Pour le scrolling, j'attends des nouvelles pas de prob! Merci bien. See ya! |
| | | Bartours Invité
| Sujet: Re: Scrolling==> demande d'aide! Ven 13 Jan à 13:32 | |
| (désolé pour le pseudo, jme suis inscris mais j'ai pas encore reçu le mail pour terminer l'inscription... donc je peux pas utiliser mon pseudo!)
La rage! j'ai essayé mon 'si ... fin si' pour remplacer les 8 (et non pas 6 désolé 'else') et ça marche pas, pourtant j'y croyais vraiment... en fait le truc c'était de dire : if(key[0])NumeroImage=0; (en clair, si rien n'est appuyé, je blit ma première image (position par défaut) j'ai essayé avec NULL mais ça fonctionne pas non plus ça change rien...) Chui sur qu'il doit y avoir une autre méthode plus rapide que de faire plein de else, mais j'attends de voir deja les commentaires que j'aurais! |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Sam 14 Jan à 12:55 | |
| Pour passer derriere une caisse, pas besoin de rogner des parties de bonhomme En fait, le bonhomme est dessiné d'abord, puis ensuite, la caisse : ce qui fait que le bonhomme a été intégralement dessiné Pour la collision, elle reste la meme : c'est juste que la représentation du tile est plus grande que sa zone : ce qui fait qu'il dépasse. Pour la machine, le bonhomme subit toujours des effets de collision de tile normale (pas besoin de changer) mais c'est juste le dessin du tile de la caisse qui se fait : - plus grand que la zone d'un tile : il déborde - Apres avoir dessiné le personnage L'astuce a utiliser est la notion de couches (layers) Un petit exemple visuel : Prend l'émulateur ZSNES, prend "secret of Mana" et lance le Balade toi dans le jeu : tu verras que le gars peut etre caché par des sapins. Sur l'émulateur Zsnes, appuies sur les touches 1,2,3,4,5 au dessus des touches AZERTY : ça active et désactive des layers. Tu verras que les sapins ne sont pas sur les meme layers que le sol --> La console dessine d'abord le sol (layer 1), puis les sprites (le gars) (layer 5) puis ensuite les élément qui peuvent éventuellement cacher les sprites (layer 2) | |
| | | Bartours
Nombre de messages : 9 Date d'inscription : 13/01/2006
| Sujet: Re: Scrolling==> demande d'aide! Dim 15 Jan à 3:51 | |
| Ok je vois mieux (bah en fait le truc des layer, c'est comme avec rpg maker lol ). Dès que j'aurais avancé sur le scrolling, je m'attaquerai aux collisions pour pouvoir gerer bien cela... Sinon j'avais demandé: pour la fonction Blit, vaut mieux ajouter celle que tu m'as mis ci dessus pour coller par exemple un fond? ou alors garder l'ancienne et mettre x1 a -1? Pis j'aurais aimé savoir si il n'y avait pas une fonction qui permettrait de charger un autre format que les bitmap, parce que ça va vite d'alourdir le projet pour pas grand chose... | |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Dim 15 Jan à 13:26 | |
| Pour le blit, il est vrai que moi je prefere avoir les 2. Ainsi je ne mets jamais x=-1 j'appelle plutot l'autre, mais c'est un choix ! En terme de performances, a un iota pres, c'est pareil. (le seul test fait est négligeable devant le temps du blitting) Pour charger d'autres formats que du BMP, tu as l'extention de SDL qui s'appelle "SDL_image" que tu trouveras sur le site de SDL http://www.libsdl.org dans library Cette lib (que tu installes comme SDL), contient une seule fonction, tres puissante, qui te permet de charger des BMP,JPG,PNG,GIF,TGA et autres je crois | |
| | | Bartours
Nombre de messages : 9 Date d'inscription : 13/01/2006
| Sujet: Re: Scrolling==> demande d'aide! Lun 16 Jan à 12:10 | |
| Ok je regarderai tout ça merci! (c'est toujours plus interessant que mettre des bitmap qui alourdissent énormement le projet!) Pour ce qui est du scrolling en C (l'exemple que j'avais demandé) tu me tiendra au courant quand tu auras fait quelque chose? | |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Lun 16 Jan à 14:27 | |
| Pour l'instant, je n'ai hélas pas trop le temps, donc pas tout de suite Sinon, sache que si sur le disque tu as un BMP, un JPG ou un PNG, c'est + compact (sur le disque !) mais en mémoire, c'est pareil : car les fonctions de chargement décompressent en mémoire. En mémoire, c'est toujours du bitmap. | |
| | | Bartours
Nombre de messages : 9 Date d'inscription : 13/01/2006
| Sujet: Re: Scrolling==> demande d'aide! Dim 29 Jan à 7:40 | |
| J'espere que l'exemple que j'ai demandé ne sera pas oublié lol (c'est une facon de le rappeler!) car ça me bloque pas mal pour continuer! ^^ | |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Dim 29 Jan à 16:04 | |
| Pour ce qui est scrolling avec des tiles, je ne vois pas ce que je peux faire de mieux que le scrolling a la souris ou la promenade. Je ne pense pas rajouter - ou alors vraiment pas tout de suite - quelque chose qui présente le scrolling plus simplement... Les explications que j'ai mis devraient te permettre de comprendre comment ça fonctionne. Si ce n'est pas le cas, pose moi ta question de façon précise. Surement que je retoucherai les commentaires légers pour le scrolling a la souris, mais je ne pense pas refaire un exemple similaire tout de suite | |
| | | Fred Invité
| Sujet: Re: Scrolling==> demande d'aide! Ven 3 Fév à 9:16 | |
| Je travail avec Bartours en c++, et nous avons toujours le problème pour le scrolling. J'ai préparé un petit exemple minimaliste de 120 lignes environ qui utilise le scrolling (mais ça ne fonctionne pas). J'attends qu'on me le corrige (uniquement la partie sur le scrolling) et qu'on m'explique ce qui ne va pas. merci d'avance, voici le code:
#include<SDL/SDL.h> #define ECHAPE 27 #define ENTREE 13 #define HAUT 273 #define GAUCHE 276 #define BAS 274 #define DROITE 275 #define H 32 #define W 24 SDL_Event event; SDL_Surface *ecran; SDL_Surface *ImageFond; SDL_Surface *charset; SDL_Rect rect1; char key[400]; int Xoffset=0,Yoffset=0; //variable sensées gerer le scrolling SDL_Rect Rect(int x,int y,int w=0,int h=0) { SDL_Rect r; r.x=x; r.y=y; r.w=w; r.h=h; return r; } void Blit(SDL_Surface* source,int x1,int y1,SDL_Surface* dest,int x3,int y3) { SDL_Rect S=Rect(x1,y1,W,H); SDL_Rect D=Rect(x3,y3,0,0); SDL_Rect* pS=&S; if (x1<0) pS=NULL; SDL_BlitSurface(source,pS,dest,&D); } SDL_Surface* LoadImageSDL(char* fichier,int vram=1) { SDL_Surface* f = SDL_LoadBMP(fichier); SDL_Surface* r = NULL; if (vram) r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); if (r==NULL) vram=0; if (!vram) r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); SDL_Rect R=Rect(0,0,f->w,f->h); SDL_BlitSurface(f,NULL,r,&R); SDL_FreeSurface(f); return r; } void UpdateEvents() { while(SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: key[event.key.keysym.sym]=1; break; case SDL_KEYUP: key[event.key.keysym.sym]=0; break; } } } int main(int argc, char *argv[]) { int x1=250, y1=250; SDL_Init(SDL_INIT_VIDEO); ecran = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_DOUBLEBUF); rect1 = Rect(250,250); ImageFond = LoadImageSDL("image.bmp");//les image sont les mêmes que celle du site charset = LoadImageSDL("charset.bmp"); SDL_BlitSurface(ImageFond,NULL,ecran,NULL); SDL_SetColorKey(charset,SDL_SRCCOLORKEY,SDL_MapRGBA(charset->format,255,255,255,0)); while(1){ SDL_BlitSurface(ImageFond,NULL,ecran,NULL); UpdateEvents(); if(key[ECHAPE]) break; if(key[HAUT]) //mouvement { if(y1>0) y1-=5; } if(key[BAS]) { if(y1<600-H) y1+=5; } if(key[GAUCHE]) { if(x1>0) x1-=5; } if(key[DROITE]) { if(x1<800-W) x1+=5; } Blit(charset,24,32,ecran,x1,y1); Blit(charset,24,32,ecran,x1,y1); if (x1-Xoffset<100) //repompe de "promenade" Xoffset=x1-100; if (x1-Xoffset>800-100) Xoffset=(x1+100)-800; if (y1-Yoffset<100) Yoffset=y1-100; if (y1-Yoffset>600-100) Yoffset=(y1+100)-600; SDL_Delay(7); SDL_Flip(ecran); } return 0; } |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Dim 5 Fév à 12:39 | |
| "mais ça ne fonctionne pas"
désolé, cette question est trop imprécise. | |
| | | Fred Invité
| Sujet: Re: Scrolling==> demande d'aide! Lun 6 Fév à 4:57 | |
| En disant cela, on voulais dire que ça ne scroll pas... Copie le projet et test le pour voir ce que ça fait (je rappel que les directions ne sont pas gérées comme il le faut mais c'est pas la le problème), on aimerait juste reussir a le faire scroller. Si tu pouvais le corriger afin que le scrolling fonctionne, ca serait sympa! merci d'avance. |
| | | le_duche
Nombre de messages : 60 Age : 39 Localisation : Bruxelles Date d'inscription : 07/12/2005
| Sujet: Re: Scrolling==> demande d'aide! Lun 6 Fév à 5:14 | |
| Contrairement à ce que peuvent croire certains débutants, c'est un fameux boulot de corriger un code qui n'est pas le sien (c'est déjà assez fastidieux de trouver ses propres bugs...) Je doute que FVIRTMAN te fasse ca... | |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Mar 7 Fév à 16:17 | |
| en effet, pas le temps de corriger le code. Je peux juste te conseiller
En regardant ton code, je vois deux fois : Blit(charset,24,32,ecran,x1,y1); Blit(charset,24,32,ecran,x1,y1);
Pourquoi ?
Tu ne blit finalement qu'une seule chose (2 fois superposé cependant), et c'est dans la boucle principale. Cependant, les valeurs de x1 et y1 semblent se modifier si tu appuies sur une touche (normalement) donc en tout logique, tu devrais pouvoir faire bouger ton tile. Essaie de débugger et controle tes valeurs pour x1 et y1 | |
| | | sn00bino
Nombre de messages : 12 Date d'inscription : 08/01/2006
| Sujet: Re: Scrolling==> demande d'aide! Mer 8 Fév à 13:58 | |
| J' ai l' impression que xoffset et yoffset ne correspondent a rien. Il faut que tu blit le truc que tu veux scroller a la position xoffset et yoffset.
Enfin je crois jsui pas sur, jen profite pour verifier mes conaissances. | |
| | | Bartours
Nombre de messages : 9 Date d'inscription : 13/01/2006
| Sujet: Re: Scrolling==> demande d'aide! Ven 10 Fév à 1:17 | |
| Nous ne voulons pas que tout le code soit corrigé... D'une part parce que ça représente du travail, mais d'autre part parce que c'est un exemple qui a été fait uniquement pour qu'on puisse gerer le scrolling... Je ne sais pas pourquoi il y a Blit 2 fois comme tu le dis, mais on voulait simplement avoir un truc sous les yeux pour les explications. C'est un exemple qui a été fait en quelques temps entre midi et c'est ptêtre pour ça qu'il a qq erreures. cependant il fonctionne pour tout, sauf le scrolling. Je pense que la seule partie qui ne fonctionne pas est la suivante :
if (x1-Xoffset<100) //repompe de "promenade" Xoffset=x1-100; if (x1-Xoffset>800-100) Xoffset=(x1+100)-800;
if (y1-Yoffset<100) Yoffset=y1-100; if (y1-Yoffset>600-100) Yoffset=(y1+100)-600;
si celle ci pouvait être corrigée, ça nous rendrait grand service. (en supposant que ça soit la ou coince le scrolling). Les "800" et "600" qui sont mis correspondent evidement à la résolution choisie. J'attends sur vos réponses! si jamais vous ne voulez pas, c'est pas grave, j'essayerai de faire autrement!
Sinon pour sn00bino> "Il faut que tu blit le truc que tu veux scroller a la position xoffset et yoffset." => si je fais ça, je crois que mon perso risque de toujours commancer au point supérieur gauche de l'écran.. Or il est censé pouvoir commancer ou je le souhaite. | |
| | | sn00bino
Nombre de messages : 12 Date d'inscription : 08/01/2006
| Sujet: Re: Scrolling==> demande d'aide! Ven 10 Fév à 4:46 | |
| Ba quand tu blit en fait tu affiche un autre bout de la map.Toi tu change bien les valeur de xoffset et yoffset mais c 'est tout.xoffset n' est pas une fonction mais juste une variable donc si tu la change theoriquement il ne se passe rien sauf si tu l' inclu dans une fonction.
Quand je dit "Le truc que tu veux scroller" ja parle en fait de la map.ton perso commence ou tu veux sa n' as pas de rapport avec la map. | |
| | | Anthony Invité
| Sujet: Re: Scrolling==> demande d'aide! Jeu 16 Fév à 6:07 | |
| Encore des problèmes pour le scrolling! J'ai besoin de précisions, j'ai blitté a xoffset et yoffset. Voila la méthode: Blit(ImageFond,ecran,Xoffset,Yoffset); ... if(key[GAUCHE]) { if(x1>0) // x1-=5; Xoffset+=5; //x1=position du charset, il est bloqué au milieu de l'écran. J'aimerai savoir maintenant si la technique est juste (comment fait tu toi?), quand on scroll, est-ce que le personnage doit rester au milieu de l'écran et c'est le décor qui bouge derriere, ou alors le personnage doit se déplacer jusqu'a une sorte de limite sur un coté de l'écran, et lorsqu'il franchi cette limite, l'écran scroll jusqu'a la fin de la map? Merci de détailler Quelle est la différence entre variable signé et non signé? Sinon dernière petite question, existe-t'il une bibliothèque ou une fonction sur la sdl, qui permettrait de copier quelques lignes bien précises sur le programme et qui irait les coller sur un autre fichier texte? Merci d'avance!! |
| | | FVIRTMAN Admin
Nombre de messages : 78 Date d'inscription : 11/11/2005
| Sujet: Re: Scrolling==> demande d'aide! Lun 20 Fév à 15:14 | |
| (comment fait tu toi?), > pour ma part, je suis partisant du coup de la limite : c'est a dire que le perso bouge quand meme dans l'écran, mais quand il s'approche du bord, alors ça scroll. Mais disons que c'est une histoire de gout le mieux, pour voir, est d'étudier un jeu entier : prend par exemple un super mario bros 2D (emulation powa) et avance doucement, et regarde a quel moment l'écran scroll (essaie d'aller en avant et en arriere) > Quelle est la différence entre variable signé et non signé? Si la variable peut contenir des nombres négatifs ou non (signé = avec signe) Une variable signée pourra aller de - X à +X alors que la meme variable non signée ira de 0 a 2X. Utilise du signé ou du non signé selon que tu pourras avoir des nombres négatifs ou non (ne te trompe pas, car si tu passes en dessous de 0 avec un nombre non signé, tu obtiens un nombre tres grand (et positif bien sur)) Tu veux créer des fichiers texte si j'ai bien compris ? iostream ou stdio te permettent ça facilement | |
| | | Le bart! Invité
| Sujet: Re: Scrolling==> demande d'aide! Lun 27 Mar à 7:51 | |
| Merci pour les reponses que tu m'avais donné, maintenant je reviens à la charge pour le scrollig, car toujours pas résolu et j'ai besoin d'achever cela pour completer mon projet.. J'essaye de scroller avec mes variables abscisses et ordonnées, la méthode n'est pas très jolie mais je vois pas trop comment m'y prendre autrement, seulement ça foire quand même, et je vois vraiment pas comment faire pour éviter cela. Voila la partie de code qui gère le scrolling, si vous pourriez maider a la corriger ou m'indiquer une bonne solution:
if(Abscisse<=100) Blit(ImageFond,ecran,Abscisse,0); else if(Abscisse>=700) Blit(ImageFond,ecran,Abscisse,0); else if(Ordonnee<=100) Blit(ImageFond,ecran,0,Ordonnee); else if(Ordonnee>=500) Blit(ImageFond,ecran,0,Ordonnee); else Blit(ImageFond,ecran,0,0);
Testez sur un de vos projet pour comprendre ce que ça fait parce que c'est pas evident à expliquer! merci!! |
| | | Contenu sponsorisé
| Sujet: Re: Scrolling==> demande d'aide! | |
| |
| | | | Scrolling==> demande d'aide! | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |