2011-06-24 1 views
0

Je suis un noob AS3 qui essaie d'essayer de devenir plus à l'aise pour passer des arguments dans des fonctions. Quelqu'un peut-il s'il vous plaît me aider à comprendre pourquoi, lorsque le code suivant est dans un fichier AS3 comme on le voit ci-dessous il fonctionne et dessine le carré violet ...Noob question concernant la transmission d'arguments dans une fonction située dans un fichier AS3 séparé

package{ 
import flash.display.*; 
public class Main extends Sprite{ 
     public function Main(){ 

    var square_commands:Vector.<int> = new Vector.<int>(5,true); 

square_commands[0] = 1;//moveTo 
square_commands[1] = 2;//lineTo 
square_commands[2] = 2; 
square_commands[3] = 2; 
square_commands[4] = 2; 

var square_coord:Vector.<Number> = new Vector.<Number>(10,true); 
square_coord[0] = 20; //x 
square_coord[1] = 10; //y 
square_coord[2] = 50; 
square_coord[3] = 10; 
square_coord[4] = 50; 
square_coord[5] = 40; 
square_coord[6] = 20; 
square_coord[7] = 40; 
square_coord[8] = 20; 
square_coord[9] = 10; 

Fill(square_commands, square_coord); 
} 
public function Fill(a:Vector.<int>,b:Vector.<Number>){ 
import flash.display.*; 
    graphics.beginFill(0x442266);//set the color 
    graphics.drawPath(a, b); 
} 
} 
} 

Cependant, quand je divise le code en deux fichiers AS3 et essayez de passer les arguments à la fonction comme suit ...

package{ 
import flash.display.*; 
public class Main extends Sprite{ 
     public function Main(){ 

    var square_commands:Vector.<int> = new Vector.<int>(5,true); 

square_commands[0] = 1;//moveTo 
square_commands[1] = 2;//lineTo 
square_commands[2] = 2; 
square_commands[3] = 2; 
square_commands[4] = 2; 

var square_coord:Vector.<Number> = new Vector.<Number>(10,true); 
square_coord[0] = 20; //x 
square_coord[1] = 10; //y 
square_coord[2] = 50; 
square_coord[3] = 10; 
square_coord[4] = 50; 
square_coord[5] = 40; 
square_coord[6] = 20; 
square_coord[7] = 40; 
square_coord[8] = 20; 
square_coord[9] = 10; 

Fill(square_commands, square_coord); 
} 
} 
} 

et ...

package{ 
import flash.display.*; 
public class Fill extends Sprite{ 
public function Fill(a:Vector.<int>,b:Vector.<Number>){ 
    graphics.beginFill(0x442266);//set the color 
    graphics.drawPath(a, b); 
} 
} 
} 

flash CS5 me donne un message d'erreur 1137 en disant qu'il attendait seulement 1 argume nt dans la ligne de code -> Fill (square_commands, square_coord);

Quelqu'un pourrait-il expliquer comment je dois transmettre les arguments square_commands et square_coord dans la fonction du second fichier AS3?

Merci d'avance pour toute l'aide !!!

Répondre

0
// main.as 
package{ 
    // good practice is to declare all imports in one spot and at the top of the class. 
    import flash.display.*; 
    public class Main extends Sprite{ 
    public function Main(){ 
     var square_commands:Vector.<int> = new Vector.<int>(5,true); 
      square_commands[0] = 1;//moveTo 
      square_commands[1] = 2;//lineTo 
      square_commands[2] = 2; 
      square_commands[3] = 2; 
      square_commands[4] = 2; 

     var square_coord:Vector.<Number> = new Vector.<Number>(10,true); 
      square_coord[0] = 20; //x 
      square_coord[1] = 10; //y 
      square_coord[2] = 50; 
      square_coord[3] = 10; 
      square_coord[4] = 50; 
      square_coord[5] = 40; 
      square_coord[6] = 20; 
      square_coord[7] = 40; 
      square_coord[8] = 20; 
      square_coord[9] = 10; 


     // notice we are passing the parameters to the constructor of the Fill class 
     var fill = new Fill(square_commands, square_coord); 
    } 
    } 
} 



// Fill.as 
package{ 
    import flash.display.*; 
    public class Fill extends Sprite{ 

    // A function with the same name of the class file is the constructor. 
    // A constructor will be called every time the new operator is called like I did in main. 
    public function Fill(a:Vector.<int>,b:Vector.<Number>){ 
     graphics.beginFill(0x442266);//set the color 
     graphics.drawPath(a, b); 
    } 
    } 
} 

I suggest you read up on OOP and learn it if you are going to do lots of coding.

0

Vous n'avez pas besoin de créer une classe de remplissage séparée, vous devez créer uniquement une fonction de remplissage dans un fichier séparé, situé dans le même package que votre fichier principal. donc votre fichier Fill.as pourrait ressembler à ceci:

// ActionScript file 
package{ 
    import flash.display.Sprite; 
    public function Fill(target:Sprite, a:Vector.<int>,b:Vector.<Number>):void{ 
     target.graphics.beginFill(0x442266);//set the color 
     target.graphics.drawPath(a, b); 
     } 
} 

Mentionner la cible de paramètre supplémentaire, qui fournira le Sprite où rectangle doit être dessiné.

L'appel de fonction pourrait ressembler:

Fill(this, square_commands, square_coord); 
Questions connexes