AS3 Flash中的类型强制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)));
}
};
这部分代码是使它从场景1到场景2(实际游戏开始的地方)的原因(按ENTER键时)。有谁知道我应该改变什么?
答案
那行使绝对毫无意义:
gotoAndPlay(( 1, Scene (2)));
如果您查看official gotoAndPlay(...) help的“示例”部分,则此方法有两种可能的用法:
- 您传递一个“ frame”参数:它是基于1的int框架索引,或者是所需框架的String标签。
- 两个自变量,第二个是Scene的String名称,它是主时间轴的一部分,第一个也是上述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,您在其中进行的操作:
- 明确说明您正在使用的对象的确切类,因为在某些情况下编译器无法确切知道,例如Event.target对象的确切类是什么。有一个很好的例子,很好解释:AS3: cast or "as"?
- 您想将数据从一种类型显式转换为另一种类型,通常在int或Number和String类型之间使用。
让我们看看:
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”默认值。
以上是关于AS3 Flash中的类型强制的主要内容,如果未能解决你的问题,请参考以下文章