AS3 Flash中的类型强制

问题描述 投票:0回答:1

我正在用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个回答
0
投票

那行使绝对毫无意义:

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

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

  1. 您传递一个“ frame”参数:它是基于1的int框架索引,或者是所需框架的String标签。
  2. 两个自变量,第二个是SceneString名称,它是主时间轴的一部分,第一个也是上述Scene]中的帧索引或帧标签

现在让我们破译你所拥有的。您正在作为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. 您想将数据从一种类型显式转换为另一种类型,通常在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));

所以,您试图说服玩家整数值2在某种程度上是Scene对象,但是它是不可能的,因此Flash Player抛出异常,因为它确实不明白你想要它做什么。

您要实现的目标的正确表示法(将播放头移至第二个场景)可能是

gotoAndPlay(1, "Scene2");

“ Scene2”参数是一个字符串文字,应表示您第二个场景的exact名称,我不知道它是什么,但应通过以下方式将其命名为“ Scene2”或“ Scene 2”默认值。

© www.soinside.com 2019 - 2024. All rights reserved.