我正在尝试将我的纯ActionScript Flash项目移植到Flex Builder。
我创建了一个新项目,它打开了一个mxml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
]]>
</fx:Script>
</s:Application>
现在,我正在尝试复制这个mxml文件中的Flash文档类,但无济于事。
如果我在内部添加fx:脚本以下代码:
addChild(new TradeShow());
我明白了:
1180:调用可能未定义的方法addChild。
好的,因此mxml没有隐式的DisplayObjectContainer。让我们尝试定义一个(总是在fx:Script里面):
public class TradeShow extends Sprite {}
这是另一个矛盾的错误:
1131:不得嵌套类。
我已经失去了几个小时并且多次羞愧自己。有人可以在这里点亮一些光吗?
答案 0 :(得分:2)
我创建了一个新项目,它会打开一个像这样的
这样的mxml文件
听起来您在Flash Builder中创建了一个Flex项目。除非您想要移植Flash Pro ActionScript项目以使用Flex Framework,否则我强烈建议您在Flash Builder中创建一个ActionScript项目。
我怀疑这会解决你的大多数问题。
我正在编辑以添加有关Flex及其工作原理的更多信息。
如果我在内部添加fx:脚本以下代码:
addChild(new TradeShow());
我明白了:
1180: Call to a possibly undefined method addChild.
我不太确定你为什么会收到这个错误;但是fx:Script块中的代码必须位于方法,import语句或变量定义中。这与你写的“普通”课程并没有什么不同。将MXML文件视为一个类;刚刚定义不同。 Flex编译器在引擎盖下生成MXML。应将MXML视为ActionScript代码生成语言。
好的,所以mxml没有隐式的DisplayObjectContainer。
事实并非如此。 Application类扩展了UIComponent - 与所有Flex可视类一样,它在术语中扩展了DisplayObjectContainer。因此,Application类是DisplayObjectContainer。我怀疑上述错误的原因是代码的位置。
Let's try to define one (always inside fx:Script):
public class TradeShow extends Sprite {}
Here is another contradicting error :
1131: Classes must not be nested.
在我看来,这并不矛盾。应用程序是一个类。而你正在尝试在其中定义一个新的。这在仅适用于ActionScript的类中不起作用,并且在MXML类中不起作用。
如果您真的想使用Flex,那么您应该阅读Flex Component LifeCycle。以下是MX Component LifeCycle,此处是Spark Component Lifecycle的信息。
答案 1 :(得分:2)
您甚至可以在Flash Builder中创建Flash Professional项目,并使用Flash Builder界面构建代码,您可以通过Flash Builder和Flash Professional编译swf。
这是开发具有带资产的FLA文件的项目的一种很好的方式。
答案 2 :(得分:1)
是的...... Flex有点不同。我不会乱用类文件(甚至认为我应该)所以我不能评论,但为了让addChild工作,只需这样做:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
private function init():void
{
this.addChild(new TradeShow());
}
]]>
</fx:Script>
</s:Application>
在主应用程序标签中添加了“creationComple”处理程序,还添加了“init()”函数。
答案 3 :(得分:0)
不应将纯动作脚本项目重新创建为flex项目。除非出于某种原因需要灵活组件,否则应使用AS3项目选项。移植到flashbuilder背后的意图是什么?
答案 4 :(得分:0)
以下是我解决它的方法:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="1300" minHeight="700" applicationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
private function init():void
{
var show:TradeShowOrig = new TradeShowOrig();
this.stage.addChild(show);
show.init();
}
]]>
</fx:Script>
</s:Application>
请注意,Flex的“文档”类mxml名为TradeShow.mxml。我的主要课程是同样称为 TradeShow.as。这导致了无法解决的问题,因为事情变得非常混乱,没有明显的编译错误。我不得不将我的文档类重命名为TradeShowOrig.as,所有问题都突然消失了。