Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| question sur les sprites | |
| | Auteur | Message |
---|
lodchjo
Nombre de messages : 162 Age : 53 Localisation : Anvers Date d'inscription : 26/12/2011
| Sujet: question sur les sprites Mar 31 Jan 2012 - 10:54 | |
| Bonjour! J'ai une question sur le gestion des sprites qui m'embête. Pour faire apparaitre 'de loin' un vaisseau, je charge un image dans un élément sprite et puis je réduit sa taille (p.ex. taille 0.1, soit 10%), pour après le grandir, p.ex. je le grandis 10 fois par 120% (voir code ci-dessous). - Code:
-
dim x scene2d 1 file_load 1,"background.bmp" full_space 1 sprite 2 sprite_file_load 2,"ship.bmp" sprite_scale 2, 0.1,0.1 sprite_position 2, 240, 240 for x= 1 to 12 sprite_position 2, 240, 240 sprite_scale 2, 1.2,1.2 wait 1 next x end
Le problème c'est que quand je réduit la taille de départ (10%), le sprite perds sa qualité, c-a-d, le BMP chargé dans le sprite est irréversiblement réduit en taille: le sprite ne contient plus que 10% d'info du BMP hors que je m'attendrais que le BMP resteraient intacte dans la mémoire et le sprite affiché est affiché comme image réduite. Mais ceci n'est pas le cas, donc, si je fait grandir le sprite pas à pas pour le faire 'rapprocher' jusqu'a ce qu'il a sa taille normale, l'image devient super-moche, car la qualité est tout perdu et on ne voit que des carrés qui s'approchent. J'ai essayé de toujours charger le BMP a nouveau dans le sprite a chaque pas (pour regagner toutes les infos), mais a chaque pas de la grandissement (de 10% jusqu'a environ 100%), ça fait apparaitre le sprite en haut de l'écran a gauche parce qu'il perd sa position et aussi il reprends sa taille normale a chaque nouveau chargement du sprite. Donc je dois toujours re-déplacer le sprite et re-réduire sa taille jusqu'a ce qe le boucle arrive a la taille finale de 100%, mais a chaque pas ça le fait apparaitre 2 fois sur l'écran: 1 fois pendant le rechargement du BMP en haut et a gauche de l'écran (même si je le déplace immédiatement) et puis après le déplacement il apparait là ou il faut. J'ai essayé sprite_hide puis sprite_show, mais ça le fait scintiller encore plus. Est-ce qu'il y a une meilleure manière pour réaliser ce que j'essaie de faire, ou c'est un bug? Ce qui serait bien, c'est que: - le sprite garde toutes les infos du bmp en mémoire, même après reduction (sprite_scale); - que le sprite, dès chargé avec une nouvelle image (ou la même) garde quand-même sa position et ces mesures - ceci est aussi important pour simuler une figure qui se ballade: le sprite doit changer tout le temps une nouvelle image pour simuler le mouvement et il est donc essentiel que le sprite garde sa position et mesure sans scintiller - il y a une manière pour préciser la taille du sprite en pixels et pas en pourcentage (plus pratique et plus exacte qu'accumuler des changement en pourcent). Merci d'avance, Lode PS: les images utilisés importent peu; ils viennent tout simplement de google dans cette fase ci, je ferai le graphisme moi-mème après background.bmp = http://cvms.canfield.k12.oh.us/web/clips/PHOTOS/SPACE/STARS.BMPship.bmp = http://digdeep.youthedmusic.com.au/wp-content/uploads/2009/05/spaceship.bmp(reduit jusqu'a largeur de 200 px, le maximum pour un sprite) | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: question sur les sprites Mar 31 Jan 2012 - 11:39 | |
| Bonjour,
Il y a une manière, c'est de charger successivement plusieurs petites images de ton sprite pour faire l'animation, au lieu de lui réduire la taille.
Un logiciel comme irfan vew te fera ça les doigts dans le nez comme on dit. Tu peux réduire une image en pourcentages ou en valeur, en gardant le rapport longueur/largeur ou en ne le gardant pas (case à cocher).
Tu ouvre une image avec, tu va sur le menu image et là sur "resize/resample"
| |
| | | lodchjo
Nombre de messages : 162 Age : 53 Localisation : Anvers Date d'inscription : 26/12/2011
| Sujet: Re: question sur les sprites Mar 31 Jan 2012 - 12:11 | |
| Bonjour, exdragon! Oauis, j'utilise irfanview souvent. Quand-même, ça m'oblige a faire une dixaine d'images pour faire apparaitre 1 seul objet. Et le problème reste, qu'a chaque chargement d'image, le sprite est réinitialisé: la position est a nouveau haut+gauche et ça provoque de la scintillement. Mais peut-être pour resoudre ceci, il suffit de définir autant de sprites que d'images pour cet objet? C'est un sacré détour, mais bon, ça marche _peut-être_ pour faire apparaitre le vaisseau sans trop de scintillement (a voir!), parce que le nouveau cache l'autre a chaque fois, mais pour simuler du mouvement comme qq'un qui se ballade, sa complique vachement plus les choses qui pourraient être simples. Bon, je vais continuer a experimenter Merci pour la suggestion! Bonne journée! | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: question sur les sprites Mar 31 Jan 2012 - 12:18 | |
| Tu dis qu'en chargeant une image dans le sprite ça positionne celui-ci en haut et gauche du scene2D ? Bizarre comme fonctionnement... La logique voudrait qu'il reste à sa place XY. Je vais essayer de tester pour voir, cet aprem. Sinon en attendant, essaie de voir si tu ne peux pas le repositionner au moment dés que tu as chargé son image. - Citation :
- ça m'oblige a faire une dixaine d'images pour faire apparaitre 1 seul objet
Tu veux faire une animation, et ça comporte forcément plusieurs images De plus le changement d'images est préférable dans ton cas au changement de taille du sprite. Pour les animations avec les sprites je n'ai pas encore essayé, j'ai juste fait le programme de vaisseaux que tu avais vu mais son image ne changeait pas. Je compte essayer bientôt, mais Bon Jack avait dit que Panoramic n'était pas fait pour ça spécialement alors que peut-être il y a un bug je ne sais pas, il faut voir et tester. EDIT : Je suis en train d'essayer les sprites animés. Tu devrais essayer 2D_image_copy au lieu de Sprite_file_load. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question sur les sprites Jeu 2 Fév 2012 - 19:42 | |
| Sinon, pour réduire le scintillement, je fais souvant HIDE de la SCENE2D avant toute modif, puis SHOW après les modifs. C'est à peine perceptible, mais on ne voit plus afficher les différentes étapes intermédiaires. C'est nettement meilleur.
Je n'ai pas essayé, mais tu peux aussi tenter INACTIVE ...modifs...ACTIVE.
| |
| | | lodchjo
Nombre de messages : 162 Age : 53 Localisation : Anvers Date d'inscription : 26/12/2011
| Sujet: Re: question sur les sprites Jeu 2 Fév 2012 - 22:59 | |
| Bonjour! J'ai aussi essayé SHOW-HIDE, mais pour un mouvement un peu vite et des calculs a faire en même temps, ça le fait pas. Bon, j'attends un upgrade pour continuer a jouer avec les sprite Merci quand-même! | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: question sur les sprites Jeu 2 Fév 2012 - 23:03 | |
| Merci Jack !!!
Moi aussi j'ai essayé tout ce qu'il est possible, j'ai fait un simili "double-buffer", les "hide/show", les "inactive", rien à faire.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question sur les sprites Ven 3 Fév 2012 - 0:45 | |
| J'ai fait des essais aussi. Ce doit être un bug: la commande SPRITE_SCALE efface le contenu du SPRITE (tout est redéfini en noir, donc invisible sur la SCENE2D. Après un SPRITE_SCALE, il faut refaire un SPRITE_IMAGE_LOAD ou un SPRITE_FILE_LOAD pour revoir le SPRITE à l'écran ! Et en plus, on constate qu'effectivement, la position du SPRITE a également été modifiée et (0,0), ce qui provoque ce scintillement insupportable. Si l'on ne fait pas de SPRITE_SCALE, on peut déplacer un SPRITE dans la SCENE2D sane scintillement, en faisant un WAIT de quelques millisecondes ou dizaines de millisecondes entre chaque déplacement pas pas de 1, 2 ou 3 pixels. Le problème est bien causé par SPRITE_SCALE. Je pense que Jack devrait se pencher sur ce problème. Mise en évidence du bug: - Code:
-
dim i%
width 0,700 image 1 : file_load 1,"essai.bmp" scene2d 2 : top 2,10 : left 2,10 width 2,400 : height 2,400 file_load 2,"fond.bmp" picture 3 : top 3,10 : left 3,440 width 3,200 : height 3,300 2d_target_is 3 : 2d_image_paste 1,0,0
sprite_target_is 2 sprite 1 sprite_image_load 1,1 : ' ici, le SPRITE apparait for i%=1 to 75 ' ligne suivante pour adapter la taille du SPRITE ' sprite_scale 1,i%*(1/75),i%*(1/75) : ' on va du plus petit au plus grand sprite_position 1,2*i%,2*i% sprite_show 1 ' si on met la ligne suivante en commentaire, ' on ne voit plus le SPRITE si on utilise la ligne 19 ! ' sprite_image_load 1,1 wait 30 next i%
Tel que le programme est fourni, il déplace le SPRITE sans scintillement. Si l'on enlève l'apostrophe devant la ligne 18, on ne voit plus le SPRITE du tout, alors qu'il est chargé en ligne 14. Il faut réactiver la ligne 22 pour recharger chaque fois le SPRITE, et là, on voit ce fameux scintillement, et une apparition fugitive du SPRITE en position (0,0). Les images utilisées sont: fond.bmp = un fond jaune uni de 400x400 pixels essai.bmp = un papillon stylisé sur fond noir de 200x200 pixels Ceci met en évidence les DEUX problèmes de la commande SPRITE_SCALE: 1. le contenu actuel du SPRITE est remplacé par du noir 2. la position du SPRITE est ramenée à (0,0) Je pense que Jack devrait se pencher sur le problème. | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: question sur les sprites Ven 3 Fév 2012 - 4:09 | |
| J'ai déjà fait un déplacement de vaisseaux si tu te souviens, sans scintillements et avec fluidité, mais c'est parce que je ne faisais pas d'animation d'image à l'intérieur du sprite (changement d'apparence), comme par exemple un personnage qui marche, ou un vaisseau dont on verrait le moteur souffler, ou encore un hélico avec son hélice qui tourne. Le problème est là, dés qu'on change les images, et ce n'est pas seulement le scale qui est en cause, c'est l'arrivée d'une image sur le sprite.
Ici tu ne verras pas le scene2D scintiller, car il n'y a pas de changements d'images. Teste avec un perso qui marche tu verras.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question sur les sprites Ven 3 Fév 2012 - 9:08 | |
| C'est bien ce que j'ai décrit dans mon post. Enlever l'apostrophe devant la ligne 22 montre le scintillement car le SPRITE repasse en (0,0), et enlever l'apostrophe devant la ligne 17 en laissant celui devant la ligne 22 montre le problème de SCALE avec l'effacement du SPRITE. C'est pourquoi je parle de bug en en appelle à Jack ! | |
| | | Contenu sponsorisé
| Sujet: Re: question sur les sprites | |
| |
| | | | question sur les sprites | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |