Voir la version complète : [NDS][Aide] Palib et Zoom : questions :
Salut,
j'essaie de faire un zoom sur un sprite mais ca ne fonctionne pas...
Même les exemples ne fonctionnent pas avec les émulateurs. Est ce qu'ils supportent la fonction ?
Je vais peut etre dire une bétise, mais il me semble que les émulateurs supportent assez mal cette fonction.
Tu as essayé sur hardware?
Je m'étais posé la question aussi quand j'ai commencé à developper et en fait les fonctions de rotations et de zoom ne sont "visibles" que sur hardware.
OK merci ca m'éviteras bien de chercher pour rien !!
Salut, j'ai un sprite en bas de l'ecran qui monte progressivement.
J'aimerais qu'il deviennent de plus a plus gros au fur et à mesure qu'il monte.
J'ai une variable zoom à laquelle j'enlève 1 à chaque boucle mais mon sprite ne zoom pas.
Une idée ?
verifie que tu n'initialises pas cette variable dans la même boucle
Salut, j'ai un sprite en bas de l'ecran qui monte progressivement.
J'aimerais qu'il deviennent de plus a plus gros au fur et à mesure qu'il monte.
J'ai une variable zoom à laquelle j'enlève 1 à chaque boucle mais mon sprite ne zoom pas.
Une idée ?
héhé tails le prend pas pour un debile quand meme :D (quoi que des fois tu fait pas gaffe ca peut arriver)
j'ai une idée !! essaye d'etre un peu + vague dans ta question voir si on peut un peu mieu cerner le probleme :ph34r: :o :D
esque tu remet a jours les attributs de ton sprite ? (normalement si tu fait ta copie oam pendant la vbl y'a pas de soucis, je sais pas si ca y est par default dans la lib que tu utilise)
Dr.Vince
03/05/2006, 22h30
c'est clair qu'un bout de code ça pourrait aider (surtout toi d'ailleurs)
Avant la boucle j'initialise :
s32 zoom = 256;
PA_SetSpriteRotEnable(0,// screen
0,// sprite number
0);// rotset number.
je refait une initialisation pour le screen 1 car mon sprite traverse les 2 ecrans :
PA_SetSpriteRotEnable(1,// screen
0,// sprite number
0);// rotset number.
while(1)
{
PA_SetRotsetNoAngle(0, //screen
0, // rotset
zoom, zoom);
zoom = zoom - 1;
}
et je boucle...
je ne fais que reprendre l'exemple sauf que dans l'exemple , pour zoomer avec le pad, ils mettent :
zoom -= Pad.Held.Up - Pad.Held.Down;
Dr.Vince
04/05/2006, 12h16
rajoute une temporisation dans ta boucle car à mon avis ça va tellement vite que tu ne vois rien du tout
en plus je sais pas c'est quoi la limite pour le zoom, j'ai vu que 128 c'est 2 fois plus gros mais l'ami Mollusk ne dit rien de plus dans la doc
sinon pour tester au lieu de faire une décrémentation met 128 comme ça tu verra si le zoom fonctionne
J'ai dej aune temportisation dans ma boucle, jene l'ai juste pas précisé.
J'ai testé en mettant le zoom a 128 sur un sprite rond en 8x8.
Le zoom fonctionne plus ou moins, mon sprite rond devient un carré plus gros...
Dr.Vince
04/05/2006, 17h49
pour créer tes sprites est que tu utilises cette fonction :
PA_CreateSpriteEx
avec double_size activé ???
A ma connaissance, pas de trop de limite inférieure : 128 fera 2 fois plus gros, 64 4 fois, etc...
Par contre, Dr Vince a raison, si tu n'actives pas l'option DblSize, tu ne pourras pas avoir un sprite plus gros. (et dans tous les cas tu ne pourras avoir un sprite que 2 fois plus gros).
Solution alternative : si ton sprites fait moins de 64x64, tu le centres dans un cadre de 64x64, comme ca la taille pourra monter jusqu') 128x128 en dblsize
NOn je 'avais pas activé l'option double size.
SI je résume, mon sprite de 8x8 ne pourra au maxi que être zoomé en 16x16 puis 32x32 avec l'option double size ?
PS: Vriament chiant de pas pouvoir tester sur emu >_<
3D? D'ailleurs en passant y'a un gars qui a posté une lib 2D utilisant le GPU de la DS au concours neoflash.
Elle n'est pas très fournie (quelques fonctions du style dessiner une image, la zoomer ou en dessiner une partie (tile)) mais c'est un bon début, j'espère que ça se développera. Ca pourrait vous intéresser ;)
J'avais d'ailleurs suggéré à l'auteur un truc tout con pour faire de la 3D sur les deux écrans: utiliser un buffer 3D de 512x192 et afficher le même BG sur les deux écrans avec un scrolling. Je ne sais pas si ça fonctionne (pas eu de nouvelles depuis) -- si quelqu'un veut tester :whst: -- mais si c'est le cas ça vaudra vraiment la peine pour le homebrew, vu qu'avec une fonction du style SetCurrentScreen on pourrait simplement (en réglant le scissor et l'offset) choisir sur quel écran on veut dessiner :)
sensei> Oui c'est ça :)
SI je résume, mon sprite de 8x8 ne pourra au maxi que être zoomé en 16x16 puis 32x32 avec l'option double size ?
S'il fait 8x8, il ne pourra faire que 8x8 en zoomé (limité au cadre du sprite), et 16x16 en double size (double la taille du cadre). Tu peux le zoomer plus, mais tout ce qui déborde du cadre ne sera pas affiché (donc en gros tu verras le milieu de ton sprite en énorme mais le contour limité à un carré, ca fait très moche ^^)
=> Tu peux mettre ton sprite au milieu d'un sprite de 16x16, et alors là tu auras 32x32 en double size, et tu peux le mettre dans plus gros pour avoir plus, etc...
Concernant l'utilisation du GPU, en fait j'avais commencé à regarder (indépendemment de la lib du gars, j'étais pas au courant), et je me suis heurté à un problème : si on active les éléments 2d pour le GPU, il faut lui allouer la mémoire, donc ca donnera une mémoire limitée pour les sprites ou fonds d'un écran donné... mais pour leur donner de la mémoire tout de meme, il faudrait que j'utilise une bank de mémoire utilisée pour l'instant pour les palettes...
Moralité : si j'utilise le GPU (encore sommaire chez nous), je perds une grosse partie de la mémoire sprite/fond, et je perds la possibilité d'avoir différentes palettes par fond, ce qui est assez chiant vu comment PAlib est construit actuellement (utilise au moins 1 palette par fond par défaut, et plus pour le texte).
OK j'ai compris, je dois donc refaire mon sprite en plus gros et mettre la transparence.
Cependant, etant donné que c'est un sprite concernant un tir que je dois tester, il va falloir que je change les coordonnées des tests.
c'est pour cette raison que je gère toujours mes tirs en prenant le centre du sprite et non le coin supérieur gauche. Ca évite les déplacement en fonction de la taille du tir, du doublesize, etc... suffit d'avoir une variable style tirlx pour la largeur du sprite et après ca se change en 5 secondes ^^
OK tout compris pour le zoom Merci :)
Autre petite confirmation : pour un sprite donné, ses coordonnées x et y coresspondent bien au centre du sprite ?
Link Mauve
10/05/2006, 23h52
Non, au coin supérieur gauche...
Non, au coin supérieur gauche...
Ah... en fait je n'etais plus sur car avant de tester les coordonnées, je les affichent sur l'écran et je fais en fonction.
Ca prend le coin supérieur gauche. Ce qui veut dire que si tu le fous en doublesize, ca décale le centre
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org