AS3 Flash 中的类型强制

Type coercion in AS3 Flash

我正在 Flash 中的 AS3 中制作一个简单的跳投游戏,目前一切正常,但我收到以下提示:

错误 #1034:类型强制失败:无法将 2 转换为 flash.display.Scene。 在 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(实际游戏开始的地方)的代码。有人知道我应该更改什么吗?

该行使得 绝对 就 AS3 逻辑而言毫无意义:

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

如果您查看 official gotoAndPlay(...) help 的“示例”部分,此方法有两种可能的用途:

  1. 您传递了一个 "frame" 参数:它是基于 1 的 int 帧索引,或者是 String 所需帧的标签。
  2. 两个参数,其中第二个参数是 SceneString 名称,它是主时间轴的一部分,第一个同样,是上述 Scene.
  3. 中的帧索引或帧标签

现在让我们破译你那里有什么。您作为 gotoAndPlay(...) 参数传递。感受不同:

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

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

那么,什么是场景(2)表达式,你可能会问?它被称为 类型转换,您可以在其中进行以下操作:

  1. 明确说明您正在使用的东西的确切 class,因为有些时候编译器并不确切知道,例如 [= 的确切 class 是什么91=] 对象。有一个很好的例子,解释得很好:AS3: cast or "as"?
  2. 你想显式地将数据从一种类型转换为另一种类型(即所说的类型强制),主要用于intNumberString 类型。

让我们看看:

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”参数是一个字符串文字,应该表示您的第二个场景的确切名称,我不能我不知道它是什么,但它应该默认命名为“Scene2”或“Scene 2”。