2013-03-28 2 views
1

J'ai essayé de chercher ceci et ne peux pas sembler voir pourquoi le ci-dessous me donne l'erreur ci-dessus. Le plus proche que je suis venu était ici: strange Error 1006: %function_name% is not a function mais ça ne s'applique pas vraiment puisque le dessous est dans mon scénario principal, l'image 1. Devrais-je le déplacer vers une classe "Main.as" à la place?Erreur # 1006: valeur isn à une fonction

function centerContent(refItem:Object, xOffset:int, yOffset:int) { 
    this.x = (refItem.width - this.width)/2 + refItem.x + xOffset; 
    this.y = (refItem.height - this.height)/2 + refItem.y + yOffset; 
} 

// center the item in relation to another item 
a_mc.centerContent(another_mc, 0, 0); 

Répondre

2

Vous tentez de prototyper une fonction sur votre MovieClip.

Pour ajouter cette fonction à un MovieClip, vous pouvez étendre la classe MovieClip:

package 
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 

    public class Example extends MovieClip 
    { 
     public function Example() 
     { 
      super(); 
     } 

     public function centerContent(refItem:DisplayObject, xOffset:int, yOffset:int):void 
     { 
      this.x = (refItem.width - this.width)/2 + refItem.x + xOffset; 
      this.y = (refItem.height - this.height)/2 + refItem.y + yOffset; 
     } 

    } 
} 

Ensuite, vous pouvez appeler votre fonction centerContent:

var a_mc:Example = new Example(); 
a_mc.centerContent(obj, 0, 0); 

Sinon, vous pouvez simplement passer une DisplayObject à la fonction, comme dans:

public function centerContent(object:DisplayObject, refItem:DisplayObject, xOffset:int, yOffset:int):void 
{ 
    object.x = (refItem.width - object.width)/2 + refItem.x + xOffset; 
    object.y = (refItem.height - object.height)/2 + refItem.y + yOffset; 
} 

Qui vous pourrait alors appeler:

centerContent(a_mc, obj, 0, 0); 
+0

Cela a effectivement répondu à ma question mieux que ci-dessus, même si elle m'a conduit dans la bonne direction. Je vous remercie! – artcase

1

Vous ne savez pas comment fonctionne la portée.

Fondamentalement, centerContent fait partie d'une classe et vous essayez de l'appeler à partir d'un enfant de cette classe. Ça ne marche pas comme ça. Pour appeler la fonction, elle doit être appelée à partir de la classe dont elle est l'enfant (une fonction est un objet, identique à un MovieClip ou un Sprite ou un String).

Alors, regardez cette façon:

-Main 
--Class1 
---another_mc 
---a_mc 
----function1 
----function2 
---centerContent() 
----refItem 
----xOffset 
----yOffset 

Vous pouvez appeler un objet (encore une fois, une fonction est un objet) de son parent et rien d'autre. Donc dans cette image, à partir de a_mc, vous pouvez appeler function1 et function2 (a_mc.function1() et a_mc.function2()), mais pas centerContent (a_mc.centerContent) car il n'existe pas dans a_mc, mais dans Class1. Vous pouvez donc appeler le Class1.centerContent() (utilisez this.centerContent() pour la syntaxe et la portée appropriées) ou Class1.a_mc mais pas a_mc.centerContent().

+0

je l'ai changé pour être: «fonction centerContent (refItem: Object, movingItem: objet, xOffset: int, yOffset: int) ... Merci! – artcase

+1

Oui. Ce serait la bonne façon de gérer cela. Et dans votre fonction, échangez votre référence 'this' avec' movingItem' (en supposant que je lis bien votre code). 'this' fait référence à la classe parent, mais pas à ce que vous voulez réellement déplacer. –

Questions connexes