【问题标题】:Type coercion in AS3 FlashAS3 Flash 中的类型强制
【发布时间】:2020-08-23 01:43:49
【问题描述】:

我正在用 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)));
    }
};

这部分代码是它从场景 1 转到场景 2 的原因(当按下 ENTER 时),实际游戏开始的地方。有谁知道我应该改变什么?

【问题讨论】:

    标签: actionscript-3 actionscript flash-cs5 type-coercion


    【解决方案1】:

    这行绝对在 AS3 逻辑方面毫无意义:

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

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

    1. 您传递了一个“frame”参数:它要么是基于 1 的 int 框架索引,要么是所需框架的 String 标签。李>
    2. 两个参数,其中第二个是作为主时间线一部分的 SceneString 名称,第一个也是帧索引或场景内的框架标签。

    现在让我们破译你那里有什么。您作为 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)表达?这称为 typecasting,您可以:

    1. 明确说明您正在使用的对象的确切类,因为有时编译器并不确切知道,例如 Event.target 对象的确切类是什么。有一个很好的例子,很好解释:AS3: cast or "as"?
    2. 您希望将数据从一种类型显式转换为另一种类型(即 类型强制),主要用于 intNumber 和 字符串 类型。

    让我们看看:

    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 对象,但事实并非如此,因此 2 引发了异常strong>Flash Player,因为它不明白你想让它做什么。

    您尝试实现的目标(将播放头移动到第二个场景)的正确表示法可能是:

    gotoAndPlay(1, "Scene2");
    

    Scene2”参数是一个字符串文字,应该代表你的第二个场景的确切名称,我不知道它是什么,但它应该可能默认命名为“Scene2”或“Scene 2”。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多