PDA

Voir la version complète : [NDS][Aide] Palib et Zoom : questions :


sensei
25/04/2006, 13h03
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 ?

Gwoin
25/04/2006, 13h31
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?

KerneL
25/04/2006, 13h34
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.

sensei
25/04/2006, 14h20
OK merci ca m'éviteras bien de chercher pour rien !!

sensei
03/05/2006, 19h07
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 ?

t4ils
03/05/2006, 19h13
verifie que tu n'initialises pas cette variable dans la même boucle

Nesgba
03/05/2006, 19h38
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)

sensei
04/05/2006, 11h01
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

sensei
04/05/2006, 12h34
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é ???

Mollusk
05/05/2006, 09h03
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

sensei
05/05/2006, 11h44
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 >_<

Nesgba
05/05/2006, 18h17
un polygone ?

Brunni
05/05/2006, 18h54
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 :)

Mollusk
05/05/2006, 19h00
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).

sensei
05/05/2006, 19h41
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.

Mollusk
06/05/2006, 00h54
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 ^^

sensei
10/05/2006, 23h36
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...

sensei
10/05/2006, 23h58
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.

Mollusk
11/05/2006, 09h12
Ca prend le coin supérieur gauche. Ce qui veut dire que si tu le fous en doublesize, ca décale le centre