动作脚本:隐式强制的问题

时间:2012-11-03 17:51:55

标签: actionscript-3 flash web-applications actionscript web

我正在关注hemanth sharma关于starling框架的优秀教程系列。我或多或少地复制了他的代码并对我想到的游戏做了一些改变。代码与他在项目中使用的代码相同。然而,我遇到了一个奇怪的错误:“错误1067”它抱怨所谓的无关类型的“隐含强制”。

我浏览了之前的问题并发现了这个问题:

1067: Implicit coercion of a value of type Class to an unrelated type flash.display:DisplayObject

我收到的错误消息基本相同,但遗憾的是该解决方案不适用于我的问题。此外,我在许多有趣的不同风格中得到了这个错误。

  1. 我有一个名为NavigationEvent的自定义事件类,可以扩展 starling.events.Event。当用过的尝试在之间切换时 游戏屏幕此事件已发送。这是一些代码:

    import starling.events.Event;
    
    public class NavigationEvent extends Event
    

    发送方式如下:

    this.dispatchEvent(new NavigationEvent(NavigationEvent.CHANGE_SCREEN,{id:"play"},true));
    

    错误消息显示:

      

    错误1067:类型事件值的隐式强制:NavigationEvent到不相关的类型starling.events:Event

    当我第一次编写代码时,代码工作正常,但现在,在我写完之后 改变了它破坏的程序的另一部分。我无法解释 它。我从starling.events.Event扩展了NavigationEvent所以 类型绝对不是无关的。我甚至跑了这个程序 这个。不可否认,在屏幕之间切换的例程还没有 实施但事件没有问题。

  2. 为了让用户触发此事件,我添加了一个按钮 屏幕。它是椋鸟标准starling.display.Button;。该 button是我的屏幕类的成员变量

    private var playBtn:Button;
    

    然而,这一行会导致错误:

    playBtn=new Button(Assets.getAtlas().getTexture("play"));
    

    这次错误更加令人愤慨:

      

    错误1067:类型为starling.textures的值的隐式强制:纹理为不相关的类型   starling.textures:纹理

  3. 我该怎么办?

1 个答案:

答案 0 :(得分:3)

有时,如果在Flash Builder中打开了两个Flash Pro项目,并且两个项目在代码路径中都具有相同的目录,则可以获得您遇到的错误。当您在其中一个项目中打开文件时会发生这种情况,但是您正在编译并运行这两个项目(特别是如果您正在调试并设置了断点)。

我认为发生的事情是FB在同一个文件中编译,好像它是一个不同的文件,因为它从文件打开的那个文件“到达”并将其编译成它刚引用的那个,但不是开放的。打开的文件扩展了项目中的基类,而不是项目中带有fla / xfl的基类。虽然我们知道它实际上是一个文件,但FB显然无法弄明白。我觉得你很轻松,因为我过去必须采取真正的英雄措施来解决这个问题。

您可以通过将共享代码移动到库项目中来解决这个问题,我认为这是工程师可能认为每个人都会这样做的场景。我认为他们不能(或者至少没有)预见到历史Flash开发实践和与FB和FP一起工作的怪癖会导致这个特定的bug出现。