actionscript-3 - 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 时)的原因。有谁知道我应该改变什么?
解决方案
就 AS3 逻辑而言,这条线完全没有意义:
gotoAndPlay(( 1, Scene (2)));
如果您查看官方gotoAndPlay(...)帮助的“示例”部分,此方法有两种可能的用途:
- 您传递一个“框架”参数:它要么是基于 1 的int框架索引,要么是所需框架的字符串标签。
- 两个参数,其中第二个参数是作为主时间线一部分的Scene的字符串名称,第一个参数再次是所述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));
因此,您试图说服 Flash Player 整数值2在某种程度上是一个Scene对象,但它不可能,因此Flash Player抛出异常,因为它不了解您想要它做什么。
您要实现的目标的正确表示法(将播放头移动到第二个Scene)可能是:
gotoAndPlay(1, "Scene2");
“ Scene2 ”参数是一个字符串文字,应该代表您的第二个场景的确切名称,我不知道它是什么,但它可能应该默认命名为“ Scene2 ”或“ Scene 2 ”。
推荐阅读
- java - 试图填充数组但分配没有通过
- mininet - 如何通过 Opendaylight 控制器(GUI)更改开关配置
- android - 从数据库中获取项目 ID
- python - Python中statsmodels线性回归中的obs置信区间是什么
- react-native - Expo React Native with redux:路由的组件必须是反应组件
- java - How to Overlay text over image at left top corner
- ruby-on-rails - Stripe 重定向后请求为零且 cookie 为空
- azure - Azure - 小数据存储的最佳选择
- java - 以同步方法将字符串存储在 ArrayList 中
- kotlin - Kotlin Coroutines 中的 main-safe 是什么?