Приведение типов в AS3 Flash

Я делаю простую игру-перемычку в AS3 во Flash, и сейчас все работает, но я получаю вот это замечание:

Ошибка № 1034: Ошибка приведения типа: невозможно преобразовать 2 в flash.display.Scene. at scratch_theGame_kat_fla :: MainTimeline / startkeyPressed ()

Я понимаю, что должен быть тип экземпляра, который является неправильным, когда появляется это примечание, но когда я стал искать в своем коде преступника, я понял, что цифра «2», на которую он должен ссылаться, такова:

function startkeyPressed(event:KeyboardEvent):void
{
    if (event.keyCode,Keyboard.ENTER)
    {
        trace("new player");
        startGame = true;
        gotoAndPlay(( 1, Scene (2)));
    }
};

Эта часть кода - то, что заставляет его (при нажатии ENTER) перейти от сцены 1 к сцене 2, где начинается настоящая игра. Кто-нибудь знает, что мне следует изменить?


person Kat    schedule 07.05.2020    source источник


Ответы (1)


Эта строка не имеет абсолютно смысла с точки зрения логики AS3:

gotoAndPlay(( 1, Scene (2)));

Если вы заглянете в раздел «Пример» в официальная gotoAndPlay (...) справка, есть два возможных использования этого метода:

  1. Вы передаете единственный аргумент "frame": это либо индекс кадра int, отсчитываемый от 1, либо метка String желаемого кадра.
  2. Два аргумента, где второй - это Строка имени Сцены, являющейся частью основной шкалы времени, а первый - это, опять же, индекс кадра или метка кадра внутри указанная сцена.

А теперь давайте разберемся, что у вас там. Вы передаете аргументы gotoAndPlay (...). Почувствуйте разницу:

// Your version: one argument grouped with additional brackets.
gotoAndPlay(( 1, Scene (2)));

// Alternate version: no additional brackets, two arguments.
gotoAndPlay(1, Scene (2));

Тогда что такое выражение Scene (2), спросите вы? Это называется приведением типов. Операция, при которой вы:

  1. Явно укажите точный класс того, с чем вы работаете, потому что бывают моменты, когда компилятор не знает точно, например, каков точный класс объекта Event.target. Вот хороший пример, хорошо объясненный: AS3: приведение или как?
  2. Вы хотите явно преобразовать данные из одного типа в другой (указанное приведение типа), чаще всего используется между int или Number и String типы.

Посмотрим:

function onEvent(e:Event):void
{
    // Explicit typecasting.
    MovieClip(e.target).nextFrame();

    // Explicit typecasting through "as" operator.
    var aFrame:int = (e.target as MovieClip).currentFrame;

    // Explicit type conversion.
    trace("The current frame is", String(aFrame));

Итак, вы пытаетесь убедить Flash Player в том, что целочисленное значение 2 каким-то образом является объектом Scene, но это не так, поэтому исключение, созданное Flash Player, потому что он не понимает, что вы от него хотите.

Правильная запись того, чего вы пытаетесь достичь (перемещение курсора воспроизведения на вторую сцену), вероятно, будет следующей:

gotoAndPlay(1, "Scene2");

Аргумент Scene2 - это строковый литерал, который должен представлять точное имя вашей второй сцены, я не мог знать, что это такое, но, вероятно, его следует назвать По умолчанию "Сцена 2" или "Сцена 2".

person Organis    schedule 07.05.2020