Forums Développement Multimédia

Aller au contenu

Déplacement clip

enterframe tableau

15 réponses à ce sujet

#1 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 20 April 2020 - 20:30 PM

Bonjour,
J'ai monté un petit script pour déplacer des clips vers d'autres, ça fonctionne bien mais je n'obtiens pas le "trace("Fin du déplacement");". Quand je clique sur un clip il se déplace et viens se positionner correctement sur un autre mais l' ENTER_FRAME est toujours en cours ???
J'ai préalablement opéré ce test avec 2 clips isolés dans la scène en obtenant bien mon trace("Fin du déplacement"), je ne comprend pas ce qui cloche, la différence dans le cas présent est l'utilisation de tableaux.


// DEPLACEMENT

function move_clip(e:Event):void

{
  tches[tch_ani].x += (cases[nb2].x - tches[tch_ani].x) * speed;
  tches[tch_ani].y += (cases[nb2].y - tches[tch_ani].y) * speed;


  if (tches[tch_ani].x == cases[nb2].x)
 
  {
   removeEventListener(Event.ENTER_FRAME, move_clip);
   trace("Fin du déplacement");
  }
}
 


#2 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 22 April 2020 - 06:35 AM

trace( tches[tch_ani].x, cases[nb2].x );
if ( tches[tch_ani].x == cases[nb2].x )
{
        ...
}

tches[tch_ani].x ne doit jamais être égale à cases[nb2].x
essaie avec un trace pour vérifier

#3 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 22 April 2020 - 20:32 PM

Salut, pol2095,
Je n'ai n'obtiens absoluement aucun "trace" depuis la condition, pourtant le clip se positionne bien au dessus de l'autre donc la cible est la bonne sans aucun doute. J'ai testé un "trace" de position pendant l'ENTER_FRAME pour suivre la position X en direct, il s'avère qu'il y a une petite différence de coordonnées. La position X de la cible est 370 et le clip qui se positionne dessus s'arrête à 369.55 ce qui explique que la condition ne donne rien. Je ne sais pas d'ou viens cette différence, j'ai bien fait attention pour que mes clips soit bien calés et positionnés (sans décimale). La position X finale varie également si la variable speed est plus grande.

#4 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 23 April 2020 - 06:07 AM

essaie ça

if ( Math.round(tches[tch_ani].x) == cases[nb2].x )
{
        tches[tch_ani].x = cases[nb2].x;
        ...
}


#5 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 23 April 2020 - 16:20 PM

J'ai modifé mon projet, j'ai désormais un clip unique "carte" et en face toujours "cases[nb2]", la marge d'erreur reste identique et dans ce cas tester avec le "Math.round" pour arrondire X ne fonctionne pas, cela dit j'ai réglé le problème autrement en modifiant la condition et en utilisant directement la valeur X que le "trace" me donne à l'arrêt de l'animation. Ca reste toutefois intéressant de solutionner ce genre de problème.

#6 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 23 April 2020 - 20:13 PM

quelle est la valeur de la variable "speed" ?

#7 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 24 April 2020 - 05:55 AM


var speed:Number = 0.2;
 


#8 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 24 April 2020 - 06:53 AM

il faudrait faire :

trace( tches[tch_ani].x );
tches[tch_ani].x += (cases[nb2].x - tches[tch_ani].x) * speed;

pour vérifier quand se produit le problème
cases[nb2].x est fixe ?

#9 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 24 April 2020 - 09:42 AM

J'ai simplifié et viré "tches[tch_ani].x et j'utilise un unique clip importé "carte" et cases[nb2] est effectivement fixe.
L'anime actuelle se presente comme ça:

carte.x += (cases[nb2].x - carte.x) * speed;
carte.y += (cases[nb2].y - carte.y) * speed;
 
pour la condition:

if (carte.x == cases[nb2].x)
{
removeEventListener(Event.ENTER_FRAME, move_clip);
}
 


#10 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 24 April 2020 - 12:56 PM

est-ce que tu modifies la taille des clips carte.scaleX et cases[nb2].scaleX sont-ils égales à 1 ?

#11 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 24 April 2020 - 15:33 PM

Oui, c'est le cas pour la carte avec un scale de 1.2 mais le point zéro est au centre du clip et idem pour cases[nb2], du coup je ne me suis pas alerté dans ce sens, je vais tester sans scale pour vérifier.

#12 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 24 April 2020 - 16:03 PM

Alors, jai retiré le scale mais ca ne change rien, position X du clip fixe = 500 et la carte s'arrête à 499.8.

#13 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 24 April 2020 - 18:30 PM

J'ai refait une maquette rapide pour repartir à neuf, j'observe toujours une différence en X.
Je joint un fla et un swf.

http://apklgc.free.fr/testposition.fla

#14 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 24 April 2020 - 18:47 PM

il faut que tu ajoutes au niveau de l'écouteur du bouton "Play"
_x = carte.x;

puis
var _x:Number;
function move_clip(e:Event):void
{
  _x += ( cases[nb2].x - _x ) * 0.2;
  carte.x = Number(_x.toFixed(1)); // on arrondit à une décimale
  ...
}


#15 cortoh

  • Members
  • PipPipPipPipPipPipPipPip
  • 639 messages

Posté 24 April 2020 - 21:17 PM

Je suis allez voir dans l'aide Adobe, je ne connaissait pas la métode "toFixed", du coup l'utiliser pour remédier à ce genre de problème est plutôt astucieux, je garde c'est solution en mémoire car ça pourraît bien resservir. Merci Mr Pol2095 ;-)

#16 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1918 messages

Posté 25 April 2020 - 17:59 PM

;-)



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)