Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 尝试学习actionscript/flex,尝试在没有mxml的情况下绘制方框_Actionscript 3_Actionscript - Fatal编程技术网

Actionscript 3 尝试学习actionscript/flex,尝试在没有mxml的情况下绘制方框

Actionscript 3 尝试学习actionscript/flex,尝试在没有mxml的情况下绘制方框,actionscript-3,actionscript,Actionscript 3,Actionscript,好的,我正在尝试用ActionScript3和Flex3.5绘制一个方框。首先有几件事: 1) 我根本不使用任何IDE,只使用记事本和flex 2) 我根本没有使用任何mxml文件(是的,这在as3中是可能的) 3) 我没有使用继承,也就是说,我没有在我的类上使用扩展,我试图让这段特殊的代码只通过组合工作 无论如何,这是代码本身(文件名为MAIN.as): 它编译得很好,但没有显示任何内容。我应该看到一个红色的盒子,但现在我看到的只是一个空白屏幕。我已经通过使用类MAIN extends Spr

好的,我正在尝试用ActionScript3和Flex3.5绘制一个方框。首先有几件事:

1) 我根本不使用任何IDE,只使用记事本和flex 2) 我根本没有使用任何mxml文件(是的,这在as3中是可能的) 3) 我没有使用继承,也就是说,我没有在我的类上使用扩展,我试图让这段特殊的代码只通过组合工作

无论如何,这是代码本身(文件名为MAIN.as):


它编译得很好,但没有显示任何内容。我应该看到一个红色的盒子,但现在我看到的只是一个空白屏幕。我已经通过使用类MAIN extends Sprite实现了这一点,然后一起去掉了box变量,但是我想再次避免使用extends命令。很抱歉,文章中的导入有点过了头,虽然它们与问题无关,但也没什么关系。

Flex组件(如应用程序、列表、画布等)在使用addChild时只能将其他Flex组件作为子组件添加。如果要添加原始AS3原语,如Shape、Sprite、Movieclip,则必须执行
[FLEX COMPONENT HERE].rawChildren.addChild(BOX)
或在您的情况下
APPLICATION.rawChildren.addChild(框)

如果Sprite是您的主要类,我认为您应该扩展它

其次,我不是Flex方面的专家,但我认为如果没有正确初始化框架,就无法真正使用Flex的大多数类。我一直看到使用mxml完成这项工作。也许只有使用Actionscript才能做到这一点,但我看不出有什么意义。如果您想使用应用程序和其他Flex内容,请将您的入口点设置为mxml文件。否则,只需使用纯Actionscript


PS:刚刚读到,您已经发现了扩展Sprite的代码。但无论您对继承或组合的偏好是什么,为了使框可见,必须在某个时候将其附加到显示列表。所以,你有一个精灵,并吸引了它。但您仍然必须将其添加到显示列表中才能看到它。要将显示对象添加到显示列表,需要对某个显示对象容器的引用。如果扩展Sprite,则类将是1)一个容器,2)将附加到显示列表。你的主要职业至少应该是一个精灵。我想你在这里没有太多选择

文档类是ActionScript进入舞台的入口点。您的文档类对象的一个实例作为显示列表中任何对象的“根”属性存在和表示。DisplayObject类的根属性必须返回一个DisplayObject,定义为:

对于加载的SWF文件中的显示对象,根属性是该SWF文件表示的显示列表树结构部分中最顶层的显示对象

因此,您的文档类(必须)是DisplayObject,以便在舞台上显示任何内容,而不管您是否希望使用合成

关于Flex组件,如果您的主AS文件从DisplayObject扩展而来,则不需要对mx.core.Application或任何其他Halo组件进行任何引用(Sprite,主要是MovieClip,除非您涉及Flash CS*Professional中包含需要在帧中引用的时间线的对象),否则没有任何用处),您仍然可以创建BOX:Sprite并将其添加到文档类的显示列表中

这个.addChild(BOX)


而且一切都会正常工作。

如果不至少将主类扩展到MovieClip或Sprite,就无法做到这一点。即使您以这种方式调用应用程序类(我怀疑这是否可行),您也必须将其添加到显示列表中。如果要避免使用Flex,就不能使用mx名称空间。应用程序类是flex的一部分。
package 
{
    import flash.display.*;     
    import mx.core.Application;     
    import flash.events.*;      
    import mx.collections.*;
    import flash.geom.*;        
    import mx.controls.*;
    import flash.text.*;        
    import mx.events.*;
    import mx.styles.*;

    public class MAIN
    {
        public var APPLICATION:Application = Application(Application.application);
        public function MAIN()
        {
            APPLICATION.layout = 'absolute';
            var BOX:Sprite = new Sprite();
            BOX.graphics.beginFill(0xFF0000,1);
            BOX.graphics.drawRect(0,0,400,400);
            BOX.graphics.endFill();
            APPLICATION.addChild(BOX);
        }
    }
}