Вопрос Noob относительно передачи аргументов в функцию, расположенную в отдельном файле AS3 - PullRequest
0 голосов
/ 24 июня 2011

Я новичок AS3, который пытается лучше освоить передачу аргументов в функции.Может кто-нибудь, пожалуйста, помогите мне понять, почему, когда следующий код все в одном файле AS3, как показано ниже, он работает и рисует фиолетовый квадрат ...

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);
}
}
}

Однако, когда я делю код на две AS3файлы и попробуйте передать аргументы функции следующим образом ...

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);
}
}
}

и ...

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 выдает мне сообщение об ошибке 1137 о том, что он ожидалтолько 1 аргумент в строке кода -> Fill (square_commands, square_coord);

Может кто-нибудь объяснить, как мне нужно передать аргументы square_commands и square_coord в функцию во втором файле AS3?

Заранее спасибо за помощь !!!

Ответы [ 2 ]

0 голосов
/ 24 июня 2011
// 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);
    }
  }
}

Я предлагаю вам прочитать об ООП и изучить его, если вы собираетесь много писать.

0 голосов
/ 24 июня 2011

Вам не нужно создавать отдельный класс Fill, вы должны создавать только функцию Fill внутри отдельного файла, расположенного в том же пакете, в котором находится ваш Основной файл.Таким образом, ваш файл Fill.as может выглядеть так:

// 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);
        }
}

Упомяните дополнительный параметр target, который предоставит Sprite, где должен быть нарисован прямоугольник.

Вызов функции может выглядеть так:

Fill(this, square_commands, square_coord);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...