Clip deplacement

Résolu
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007 - 23 avril 2007 à 16:44
Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 - 25 avril 2007 à 14:21
Bonjour,
je débute dans le flash et action script et j'ai un petit soucis (surement 3 fois rien mais je trouve pas :P)
je crée un nouveau document flash,
je crée un clip que je place dans mon document.
et je lui met ce script :

onClipEvent(enterFrame){
    if(Key.isDown(Key.RIGHT)){
        rectangle._x += 1;
    }
}

mais la quand je teste l'anim, le rectangle ne bouge pas.

par contre si je mets :
onClipEvent(enterFrame){
    if(Key.isDown(Key.RIGHT)){
        this._x += 1;
    }
}

le rectangle se déplace.
Je suppose que c'est juste un problème d'identifiant, mais je n'arrive pas à trouver comment le changer.

Si quelqu'un peut m'eclaircir la dessus :)

5 réponses

Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 1
24 avril 2007 à 19:57
Salut,

Oki docky

Alors, la raison pour laquelle lorsque tu mets le nom du clip ça ne marche pas est simple.
Quand tu utilies les événements on() ou onClipEvent(), tu es déjà dans ton clip . Donc dés que tu écriras le nom d'un clip, il le cherchera dans celui ci.

Pour être plus explicite, un exemple expliquera mieux qu'une brique de texte (le ciment coutant cher de nos jours :P) :
Fais deux clips de type bouton dans une nouvelle scène.
Sur le premier clip (que j'appelerai bouton1), tu mets ce code :
on(release){    trace("this " + this + " :: chemin vers le bouton ? " + bouton1);
}
Avec le second bouton (bouton2), mets dans le calque :
bouton2.onRelease = function(){

    trace("this " + this + " :: chemin vers le bouton ? " + bouton2);
}
Le premier code te renverra : this bouton1 :: chemin vers le bouton ? undefinedLe second code, lui t'enverra : this _level0 :: chemin vers le bouton ? _level0.bouton2
Lorsque tu utilises l'écriture : on(), tu es donc déjà dans ton clip, le this fait référence à ton clip. Comme ton bouton n'a pas (à l'intérieur de lui) de clip nommé "bouton1", il te renvoit undefined

En gros, tu ne travailles pas sur le même niveau

Chais pas si j'ai été plus clair

--------- Darkrats ---------
la loi est dure mais c'est la loi
 -------- Infograpix --------
3
Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 1
24 avril 2007 à 10:26
Salut,

D'après ce que tu dis, ça marche avec le this, j'en déduis donc que tu as mis le code directement sur le clip, ai-je raison ?
Le this fait toujours référence à l'endroit où on se trouve. Si je mets un this dans ce genre de code :
    bouton.onRelease = function(){
        trace(this._name);
    }
le this fait référence au clip "bouton".
Dans ce cas ci :
    // Code mis sur un calque vide du root
    trace(this._name);
le this fait référence au root car il n'est associé à aucun clip
Dans ton cas, tu as sûrement mis ton code sur ton clip "rectangle" et donc ton this fait référence au clip (comme mon premier exemple)

Une chose extrêment importante : abandonne l'utilisation des "on() et onClipEvent()" ça t'aidera à éviter certains pièges (vas voir le lien)
A ta place, je mettrais ce code dans un calque (et non sur un clip) :
Code :
    this.onEnterFrame() = function(){
       if(Key.isDown(Key.RIGHT)){
        rectangle._x += 1;
    }
Fin du code
Le code doit être mis sur un calque au même niveau que ton clip rectangle (sinon faut retoucher le ciblage du clip)

Voilà, j'espère avoir pu t'éclairer

--------- Darkrats ---------
la loi est dure mais c'est la loi
 -------- Infograpix --------
0
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007
24 avril 2007 à 17:41
Salut,

D'après ce que tu dis, ça marche avec le this, j'en déduis donc que tu as mis le code directement sur le clip, ai-je raison ?
oui tout à fait.

Pour le this j'avais bien compris son fonctionnement, ce que je ne comprends pas en fait, c'est pourquoi si je le remplace par le nom du clip, ca ne marche plus alors qu le code est dans le clip directement.

Une chose extrêment importante :

abandonne l'utilisation des "on() et onClipEvent()" ça t'aidera à éviter certains pièges (vas voir le lien)
Yep j'avais cru comprendre ca, merci quand même pour le topic j'irais voir,
En fait si tu veux je bosse en parallele avec un bouquin et donc le code que j'ai mis dans mon premier post c'est la première étape.
Ensuite on optimise en mettant le code sur un calque et non plus dans le clip, on enleve les onClipEvent() etc etc.
mais je suis du genre à chercher la petite bête alors je cherche pourquoi ca marche pas avec cette première étape, histoire d'éviter les boulettes les plus simples après...
0
cs_darkthief Messages postés 23 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 6 décembre 2007
24 avril 2007 à 20:12
ok j'ai pigé ;)

Marchi bien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 1
25 avril 2007 à 14:21
Si tu as compris, pourrais-tu cocher ton post comme "réponse acceptée"
Les modérateurs apprécieront

--------- Darkrats ---------
la loi est dure mais c'est la loi
 -------- Infograpix --------
0
Rejoignez-nous