我正在用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键时)。有谁知道我应该改变什么?
那行使绝对毫无意义:
gotoAndPlay(( 1, Scene (2)));
如果您查看official gotoAndPlay(...) help的“示例”部分,则此方法有两种可能的用法:
现在让我们破译你所拥有的。您正在作为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,您在其中进行的操作:
让我们看看:
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”默认值。