Как запустить код конструктора другого файла .as из файла класса main.as, прикрепленного к файлу .fla?

У меня есть файл основного класса под названием «Main», который связан с основным файлом .fla. Вот код, который сейчас находится в этом файле:

package  {

import flash.display.MovieClip;
import CharacterPkg.Character;

public class Main extends MovieClip {

    public function Main() {

        var newCharacter:Character = new Character;
        Character();
    }
  }
}

Затем у меня есть файл, который я хочу использовать для создания персонажа на основной сцене в файле .fla. Вот код этого файла:

package  CharacterPkg{

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;

public class Character extends MovieClip {

    public function Character() {

        trace("This is running");
    }
  }
}

Я хочу, чтобы код конструктора, который находится в файле Character.as, запускался при запуске .swf. Но я получаю ошибку 1136: неправильное количество аргументов. Ожидается 1.

Я в замешательстве и потратил два дня, пытаясь понять это. Я новичок в этом и, вероятно, просто делаю какую-то глупую ошибку, но я не могу этого понять. Любая помощь будет принята с благодарностью.


person Adi    schedule 04.09.2018    source источник
comment
Я думаю, проблема в строке Character ();. С конструктором класса вы можете сделать две вещи: 1) создать его экземпляр как новый символ; 2) привести к типу объект типа Character (some_character_instance); Итак, ваша строка введите 2, но вы не предоставили аргумент, отсюда и ошибка.   -  person Organis    schedule 05.09.2018


Ответы (1)


Попробуйте как:

package  
{
    import flash.display.MovieClip;
    import CharacterPkg.Character;

    public class Main extends MovieClip 
    {

        public function Main() 
        {
            //Character(); //is not needed (won't work).

            var newCharacter :Character = new Character();
            addChild( newCharacter ); //this way auto-runs the constructor function code.
            //newCharacter.someFunction(); //example to run any other functions within newCharacter class.
        }

    }
}

Когда вы addChild класс, вы автоматически запускаете функцию-конструктор этого конкретного класса.

Чтобы запускать любые другие функции в этом другом классе, просто используйте путь, например instanceName.xxx();, где ваше instanceName равно newCharacter, а xxx представляет имя функции, закройте его с помощью ();

Изменить:

Чтобы решить вторую проблему, убедитесь, что:

1) Вы правильно связали Main.as с FLA.

  • отмените выбор любого элемента, щелкнув пустую часть рабочей области, а затем нажмите ctrl + F3

  • Main.as указан как класс (на вкладке "Опубликовать")?

2) Код для Main.as:

package  
{
    import flash.display.MovieClip;
    import CharacterPkg.Character;

    public class Main extends MovieClip 
    {
        public var newCharacter :Character;

        public function Main() 
        {
            newCharacter = new Character();
            addChild( newCharacter ); //this way auto-runs the constructor function...
            newCharacter.secondFunction(); //example to run any other functions in newCharacter class..
            newCharacter.thirdFunction(); //another test
        }

    }
}

3) Код для Character.as (внутри папки с именем CharacterPkg):

package  CharacterPkg
{

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;

public class Character extends MovieClip 
{

    public function Character() //constructor function 
    {
        trace("This is running");
    }

    public function secondFunction() :void
    {
        trace("This is second Function");
    }

    public function thirdFunction() :void
    {
        trace("This is third Function");
    }

} //end class
}//end package
person VC.One    schedule 04.09.2018
comment
Привет! Большое спасибо за вашу помощь, предоставленные вами советы сработали и позволили мне разместить видеоклип на сцене без каких-либо ошибок, но теперь есть две небольшие проблемы. Когда я компилирую, функция трассировки не работает из конструктора, она просто помещает фрагмент ролика на экран. Во-вторых, я создал вторую функцию с именем secondFunction () в файле Character.as, и в ней есть простая команда трассировки. Когда я пытаюсь вызвать эту функцию из файла main.as, он говорит, что это не функция? - person Adi; 05.09.2018
comment
Если это сработало для вашего опубликованного вопроса, отметьте его как правильное, щелкнув значок галочки. Что касается вашей второй проблемы, мне не удалось воспроизвести проблему (я могу получить трассировку кода secondFunction()). - person VC.One; 10.09.2018