我已经写了近十年的ActionScript了。但我总是使用单独的文本编辑器(如TextMate)来编写代码并使用Flash IDE进行编译。我决定在本周末尝试使用Flash Builder,因为它显然是前进的方向。
反正。我在OSX上使用Flash Builder 4.6 - 今天早上安装了,我还没有用它 - 我构建了一个简单的“Actionscript移动应用程序”(因为我目前的工作项目是一个移动通信应用程序,正在构建Flash IDE)。
package
{
import zakariya.layout.RootLayoutSprite;
public class DoesThisEvenWork extends RootLayoutSprite
{
public function DoesThisEvenWork()
{
super();
trace( "hello... what's my size: " + this.size );
}
}
override public function onLayoutUpdated():void
{
super.onLayoutUpdated();
}
override public function onSizeChanged():void
{
super.onSizeChanged();
trace( 'onSizeChanged..., new size: ' + this.size );
}
}
类RootLayoutSprite派生自LayoutSprite,是我编写的布局管理API的一部分,已用于大量和小型的几十个项目中。 onLayoutUpdated和onSizeChanged方法在LayoutSprite中定义,以及size属性。
定义看起来或多或少如此:
package zakariya.layout
{
public class LayoutSprite extends Sprite {
/*
Called after this Sprite's size changes, before layout of children is executed
*/
public function onSizeChanged():void
{}
/*
Called after this Sprite's size changes, after layout of children is executed
*/
public function onLayoutUpdated():void
{}
}
}
zakariya.layout代码是本地仓库中的原始代码 - 未编译为SWC - 它全部位于我添加到项目源路径的文件夹结构中。 Flash构建器清楚地识别基类,因为它识别RootLayoutSprite。
当我尝试构建它时,我得到以下内容:
1006: A super expression can be used only inside class instance methods. DoesThisEvenWork.as /DoesThisEvenWork/src line 17 Flex Problem
1010: The override attribute may be used only on class property definitions. DoesThisEvenWork.as /DoesThisEvenWork/src line 15 Flex Problem
1010: The override attribute may be used only on class property definitions. DoesThisEvenWork.as /DoesThisEvenWork/src line 21 Flex Problem
1020: Method marked override must override another method. DoesThisEvenWork.as /DoesThisEvenWork/src line 15 Flex Problem
1020: Method marked override must override another method. DoesThisEvenWork.as /DoesThisEvenWork/src line 21 Flex Problem
因此,Flash Builder不会让我覆盖这些方法。如果我删除'override'属性,Flash Builder会抱怨这些方法是在基类中定义的。捂脸。
请注意,这个简单的代码在Flash IDE中运行良好。
老实说,我不知道发生了什么。我没有愚弄Flash Builder配置。我已经避免使用Flash Builder多年了,因为我没有编写Flex项目......而且在我的空闲时间我编写C ++所以我对Flash Builder eclipse工具链一无所知。
我的假设是Flash IDE的编译器不如Flash Builder那么严格,因此,我一直做错了很长时间,我不知道它是错的。 < / p>
帮助?!
答案 0 :(得分:2)
代码也不应该在Flash IDE中编译 - 它包含语法错误。 您在构造函数后关闭了类声明。只需将那个花括号向下移动,一切都应该可以正常工作。
package
{
import zakariya.layout.RootLayoutSprite;
public class DoesThisEvenWork extends RootLayoutSprite
{
public function DoesThisEvenWork()
{
...
}
} // <= your class ends here
// everything below is outside of the class!
override public function onLayoutUpdated():void
{
...}
}