Приведение типов в AS3 Flash - PullRequest
0 голосов
/ 07 мая 2020

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

Ошибка # 1034: Ошибка принуждения типа: невозможно преобразовать 2 в fla sh .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)));
    }
};

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

1 Ответ

2 голосов
/ 07 мая 2020

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

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

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

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

Теперь давайте расшифруем, что у вас там. Вы передаете как 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));

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

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

gotoAndPlay(1, "Scene2");

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

...