AS3 Flash 中的类型强制

Posted

技术标签:

【中文标题】AS3 Flash 中的类型强制【英文标题】:Type coercion in AS3 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 时),实际游戏开始的地方。有谁知道我应该改变什么?

【问题讨论】:

【参考方案1】:

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

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

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

    您传递了一个“frame”参数:它要么是基于 1 的 int 框架索引,要么是所需框架的 String 标签。李> 两个参数,其中第二个是作为主时间线一部分的 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,您可以:

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

【讨论】:

以上是关于AS3 Flash 中的类型强制的主要内容,如果未能解决你的问题,请参考以下文章

将 Number 类型的值隐式强制转换为不相关的类型 flash.display:MovieClip

在 AS3 中强制垃圾收集?

TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClickEvent。(

AS3:强制保存 Xml 文件

AS3强制单例

AS3 - 仅 iOS 强制横向模式?