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 标签。李>
两个参数,其中第二个是作为主时间线一部分的 Scene 的 String 名称,第一个也是帧索引或场景内的框架标签。
现在让我们破译你那里有什么。您作为 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 和 字符串 类型。
让我们看看:
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
TypeError: Error #1034: 强制转换类型失败:无法将 flash.events::MouseEvent@73b7cc1 转换为 mx.events.ItemClickEvent。(