[Tutoriel] Positionner vos sprites.

Discutez de KaraFun, donnez ou demandez ici de l'aide sur l'utilisation de KaraFun

[Tutoriel] Positionner vos sprites.

Postby Rapidkiller » Tue Jun 26, 2007 10:57 am

Nous allons voir dans ce tutorial comment placer les sprites à l'endroit voulu dans Karafun.

Tout d'abord, les bases :

    - l'écran de l'éditeur a une résolution de 640X480.
    - le DPI de l'image ne change rien du coup à la manière dont Karafun place les sprite.

Placement au bord de la fenêtre de preview :

Plutot que de balancer des formules sorties de l'au-delà, essayons d'expliquer clairement comment cela fonctionne à l'aide d'un exemple :

Si on insere un sprite de 4X4 (soit la taille de sprite minimum autorisée) sur un évènement avec un zoom de 100% :

Logiquement, pour atteindre les bords il faut en H déplacer de 318 (640 / 2 - La moitié de la largeur du sprite) et en V de 238 (480 / 2 - La moitié de la hauteur du sprite)

Maintenant prenons le même évènement mais on zoome à 200% :
Pour atteindre les bords il faut en H déplacer de 158 (640 / 4 (car zoom à 200%) - toujours la moitié de la largeur du sprite) et en V de 118 (480 / 4 (car zoom à 200%) - toujours la moitié de la hauteur du sprite)

Allez on joue au calcul ?

Si on zoom à 50% d'apres la logique ci-dessus, pour atteindre le bord je dois déplacer mon sprite de
    H : 640 (car 640 / 2 x 2) - 4 / 2 (Diviser par 0.5 ou 50% revient à multiplier par 2)
    V : 480 (car 640 / 2 x 2) - 4 / 2 (Diviser par 0.5 revient à multiplier par 2)

Soit H = 638 et V = 478 ?

Testons cela ...

Image

C'est bien ca

Mettons cela en formule pour simplifier le calcul.
Soit :
    - H = le decalage horizontal pour toucher le bord
    - V = le decalage vertical pour toucher le bord
    - Z = le niveau de zoom
    - ResoH = Resolution Horizontale du sprite
    - ResoV = Resolution Verticale du sprite


H = 640 / 2 / Z - (ResoH / 2)
V = 480 / 2 / Z - (ResoV / 2)


Bon bien y a plus qu'à tester ?

Un sprite de 280 x 164 avec un zoom à 77%

H = 640/2 / 0.77 - (280 / 2)
H = 320 / 0.77 - 140
H = 275.58

V = 480/2 / 0.77- (164 / 2)
V = 240 / 0.77- 82
V = 229.68

Image

Ca marche :mdr:

On obtient par ce calcul la position en coordonnées absolues (je ne sais pas si c'est le terme mais ca claque ;) )

Si on utilise le tableau suivant vous pourrez placer vos sprites à votre gré en bas à gauche ...

Image


Et si je veux placer un sprite n'importe où dans l'éditeur moi ?

C’est précisément ce que nous allons voir dans cette partie.
Pour se faire, nous allons combler un manque de l’éditeur (désolé à l’équipe Récisio, c’est une petite vanne pas méchante ;)), nous allons ajouter en piste de sprite une grille faite en PNG et graduée pour trouver les coordonnées voulues

Image

Mis dans une piste de sprite avec transparence de 50% (selon les gouts) vous verrez en dessous que c'est pratique pour trouver le point de coordonnées

On reprend quasiment le même calcul mais cette fois –ci sans retrancher la moitié de la hauteur/largeur du sprite car par défaut Karafun centre le sprite au milieu de l’écran :

Soit :
    H = le decalage horizontal pour toucher le bord
    V = le decalage vertical pour toucher le bord
    Z = le niveau de zoom
    Xvoulu = position horizontale que l’on désire pour le sprite
    Yvoulu = position verticale que l’on désire pour le sprite


H = Xvoulu / Z
V = Yvoulu / Z


On a donc dans notre exemple :

H : -160/0.35 = -457
V : -90/0.35 = -257

Notez que si vous voulez que le bord du sprite arrive au point (-160;-90) il vous suffit de retrancher la moitié ou la totalité de la résolution horizontale/verticale du sprite pour que ce soit le bord droit ou le bord gauche qui touche (-160 ;-90) et si le sprite est à droite ou à gauche du centre … (idem avec la hauteur)

Donc on obtient ...

Image
Bon ayant arrondi je tombe pas pile poil mais ... on est proche …

... ca marche aussi :mrgreen:


Et si on parlait trajectoire ?

Donc la base pour les trajectoires :
    la durée de l'effet ne change pas les coordonnées en théorie (nous verrons qu'en pratique c'est faux mais bon ...)
    le mouvement total (donc complet) représente un déplacement de 800 pixels (que ce soit un déplacement vers le haut, vers la droite ...)

Meme un déplacement vers le bas à droite déplace en fait le sprite de 800 pixels vers la droite et en meme temps de 800 pixels vers le bas.
Nous avons tout de même 2 zooms qui peuvent influencer cette distance :
    le zoom du sprite (que je nommerai Zsp)
    le zoom de l'effet (que je nommerai ZefH ou ZefV selon le zoom modifié dans les paramètres de l'effet (H pour le zoom Largeur et V pour le zoom hauteur)
Attention super dur ;)

Nous avons toujours (Xd, Yd) : les coordonnées de départ du sprite (prise sur la grille).
Trouvons Xf et Yf les coordonnées du sprite en fin d'effet (toujours sur la grille) :
Xf = Xd +/- (800 x Zsp x ZefH)
Yf = Yd +/- (800 x Zsp x ZefV)

Plus ou Moins car selon la grille on devine si Karafun ajoutera ou soustraira selon le mouvement (PLUS si vers la droite, MOINS si vers la gauche, PLUS si vers le bas, MOINS si vers le haut)

Bon je vous vois faire les gros yeux et vous gratter la tête alors un exemple avec des chiffres sera plus parlant ;)
Disons un sprite avec effet de bas gauche vers haut droite ayant un zoom de 35% (oui j'aime bien ce chiffre tordu) et pour coordonnées de départ (-857;-571) ce qui compte tenu du zoom et du post d'avant nous place notre cercle sur la grille à (-300;200) c'est beau le hasard :O
On choisit aussi de compliquer les calculs en modifiant les zooms de l'effet :
Largeur : 71% / Hauteur : 141%

D'aprés ma formule (je me sers des coordonnées de la grille) je devrais avoir :

Xf = -300 + (800 x 0.35 x 0.71)
Yf = 200 - (800 x 0.35 x 1.41)
Xf = -101
Yf = -194
Ce qui donne le point d'arrive sur la grille (Xf;Yf) = (-101;-194)
Bien entendu pour avoir les coordonnées du sprite en tenant compte du zoom …on reprend la formule vue plus haut et donc on divise par 0.35 soit un point (-289;-556)

Image

Et voilà ... c'est fini ... on voit bien que mon sprite se rapproche de mon point d'arrivée définie sur la grille légèrement trop tôt pour que l'on voit les deux sprites ;) (Non ca ne se voit pas ? C'est normal, c'est un screenshoot donc il ne bouge pas mais je vous jure qu'il vient se coller dessus à la fin)

Et bien non ce n'est pas terminé car je vous en parlais au début ...

Que se passe t-il si la durée de l'effet est plus longue que la durée de l'effet du sprite ? Il va disparaître avant nos coordonnées calculées si dessus

Rassurez vous c’est très simple : il n’y a que deux cas de figure si on prends en compte le temps dans nos calculs :
    si durée d'affichage du sprite > durée de l'effet => cas de figure ci dessus
    si par contre durée d'affichage du sprite < durée de l'effet alors il faut diviser l'ensemble par "durée d'affichage/durée effet" car l'effet étant constant celui ci ne fera qu'en partie.


Le même exemple que ci dessus mais cette fois ci l'effet dure toujours 2 secondes et le sprite ne s'affiche qu'une seconde.
On peut dire que l'effet se complétera à 50% (1sec/2sec)

Xf = -300 + (800 x 0.35 x 0.71) x 1/2
Yf = 200 - (800 x 0.35 x 1.41) x 1/2

On a donc le point d'arrivée sur la grille (Xf;Yf) = (-200;2) et en valeur réelle tenant compte du zoom (-573;7)

Plaçons ce point et regardons si le sprite passait en effet par là une seconde après son départ ;)

Image

En effet, virgule oblige cela ne tombe pas pile sur la trajectoire mais on n’en est pas loin ;)

Bon maintenant vous avez tout pour jouer, choisir l'arrivée voulue et définir les paramètres à choisir ...

Persdo je vais prendre un aspirine :oops:
User avatar
Rapidkiller
 
Posts: 132
Joined: Sun May 01, 2005 10:58 pm

Return to Partagez votre expérience

KaraFun Tutorial

Who is online

Users browsing this forum: No registered users and 1 guest

cron