网站如何建设二级域名代理,免费的素材网站有哪些,食品网站源码,一起做陶瓷官方网站要了解这个问题就要先对flash中的显示对象结构有一个大概的了解#xff1a; 第一级#xff1a;舞台#xff1b; 第二级#xff1a;当前SWF#xff1b; 第三级#xff1a;各种容器及可视对象#xff08;如#xff1a;文本框#xff0c;位图……#xff09;#xff1b…要了解这个问题就要先对flash中的显示对象结构有一个大概的了解 第一级舞台 第二级当前SWF 第三级各种容器及可视对象如文本框位图…… 以此类推………… stage 其中舞台Stage是最根本的容器包含当前SWF的所有显示对象每个flash程序只能有一个舞台容器。 所有显示对象的stage属性指向舞台。 root 在舞台下面的也是一个容器被称作当前SWF主类的实例注AS3.0中所有容器直接或间接继承自DisplayObjectContainer类在AS3.0中每一个SWF都和一个类相关联这个类就称为SWF的主类如果没有设定文档类则MainTimeline类注MainTimeLine是MovieClip的子类就是主类。而root就指向当前SWF主类的实例注在AS2.0中_root.指代绝对路径。 this this关键字持有对当前对象的引用编译器将this关键字加在类中每一个调用实例属性和实例方法的地方。 this关键字常见使用情况 1向第三方提供对象自身的引用。 2)与return结合在类方法中返回自身的引用。 3和局部变量方法参数静态属性同名时加上this关键字明确指定使用实例属性。 1.STAGE是根是最顶层的容器可以通过STAGE的任何子容器或显示 对象以DisplayObjectContainer.stage需注意的是stage是小写如果在时间轴上trace(stage.width)是正确的如果写成trace(Stage.width则会报错)或DisplayObject.stage访问到Stage类的 唯一实例stage.就连主时间轴也是stage容器的子容器。 例如。你在主时间轴上写上代码trace(this);输出的是什么呢因为你是在主 时间轴上写的。所以返回的是一个对象MainTimeLine,也就是主时间轴了。同 志们可以试试在主时间轴上写trace(this.stage);当然输出的是Stage对象了 。也可以省略不写this,直接写:trace(stage);输出的还是Stage对象。为了更清 楚在主时间轴上写上代码trace(stage.getChildAt(0));看看输出的是什么 呢如果是MainTimeLine的话就更能说明问题了主时间轴是stage容器的第 一个子容器在索引位置0上。 2.stage.width 与stage.stageWidth 我记得width相当于sprite的width是stage上所有child构成的范围的宽 没东西width就是0stageWidth就是舞台的宽 其实这个问题很简单但是你为什么不自己用个两个文本框在各种不同的情况下 显示一下这两个的值呢。 Java代码 1.stage.addEventListener(MouseEvent.CLICK,update); 2. 3.function update(e) 4.{ 5. txt.text String(stage.stageWidth); 6. 7. txt1.text String(stage.width); 8.} stage.addEventListener(MouseEvent.CLICK,update); function update(e) { txt.text String(stage.stageWidth); txt1.text String(stage.width); } 自己看看吧改变一下舞台的大小场景上的东西还有环境缩放 自己试出来的结果永远比别人讲的来的清晰 3.这两天看AS3 cookbook和AS3的帮助文档里面很多代码执行后都会出现“TypeError: Error #1009: 无法访问空对象引用的属性或方法。”这个错误。几经周折才知道解决办法使用addEventListener( Event.ADDED_TO_STAGE, enterDLHandle )把要用的stage代码放到enterDLHandle里面就没问题了。不知道有没有其他解决方法知道的说声啊~ 在经典论坛上提问这个问题,终于有人做出全面回答了在此感谢zjs35 首先要明白stage是什么意思stage是显示对象的一个引用舞台的属性如果显示对象不在显示列表中即没有用addChild()添加stage等于null你的问题就在这里。 使用stage有下面几种方法 1、文档类的构造函数中可以直接使用stage属性 2、非文档类可以通过参数传递到类里面。 class Test extends Shape { function Test(stage:Stage) { } } 3、不想传递参数时要注意代码的顺序。 class Test extends Shape { function Test() { } functon useStage() { trace(stage) } } 这样使用 var testnew Test() test.useStage()//null你的问题出在这里 addChild(test)//添加到显示列表后就可以使用stage属性。 test.useStage()//[object Stage] 总之理解stage是显示对象的属性位于显示列表中的显示对象的stage才引用舞台 AS3.0 中root和parent的用法 一、首先看一下在单个swf中的用法 在主舞台上的帧上写下如下代码 var xxxthis is root; 新建一个MC,给它一个实例名称test_mc1在test_mc1中的帧上写下如下代码 trace(parent[xxx]); trace(root[xxx]); trace(root[test_mc1].alpha) 最终的输出为 this is root this is root 1 如果在test_mc1中在建立一个实例名称为test_mc2的movieclip如何trace它的alpha呢 trace(root[test_mc1].test_mc2.alpha); 最终输出“1”。 二、如果是两个swf,他们之间是怎样操作的呢 新建两个flash文件命名为a1和a2 在a1.fla中的帧上写下如下代码 var xxxthis is root; var myloadernew Loader(); myloader.load(new URLRequest(a2.swf)); addChild(myloader); 在a2.fla中建立一个动态文本框实例名称为txt; 在帧中写下如下代码 txt.textparent.root[xxx]; 分别发布两个flash文件然后运行a1.swf看到其显示结果为this is root; 在发布a2.swf是你会看到 ReferenceError: Error #1069: 在 flash.display.Stage 上找不到属性 xxx且没有默认值。 at a2_fla::MainTimeline/a2_fla::frame1() 不用去理它因为他不是通过a1.swf load到场景所以找不到xxx这个参数。 这里的第一个parent是a1.swf中的myloader,myloader的再上一级才能找到xxx这个参数这里也可以写成parent.parent[xxx]。 我想通过这两个例子应该比较清楚如何在AS3中使用root和parent了。 但as3的root在类型转换上出现的问题具有普遍性 as3的文档类通常使用Sprite或MovieClip但实际上继承DisplayObject的类在理论上均可做文档类 故adobe在设计root时 设计为rootDisplayObject 很多时候需要使用root as MovieClip来使用gotoAndStop一类脚本 这在前一篇文章中(AS2中的_root,在AS3的用法)已经说过了 我通过这段时间对 AS 3.0 的研究, 发现下面这个很有价值的问题, 所以今天写下来, 给大家分享. Action Script 2.0 中 this 的用法: 在 Flash 里拖一个 Button 组件到舞台, 给这个 Button 实例取个名字叫 b1, 在 b1 身上添加代码: [复制到剪贴板]CODE:on (click) { this.label 你点了这个按钮一下; } 这里的 this 指的就是 Button 对象 b1, 点击 b1 之后, b1的标签马上变为你点了这个按钮一下. 也就是说, 在 AS 2.0 中 this 指的是使用该方法的当前对象. Action Script 3.0 中 this 的用法: 在 Flex Builder 的 Design 模式下拖一个 Button 到舞台, 给这个实例取名, 也就是设置 id 的值, 还是取名 b1, 然后回到 Source 模式下, 添加代码: [复制到剪贴板]CODE:mx:Button idb1 clickthis.label你点了这个按钮一下;/ 当你运行之后就会发现, 点了 b1 之后, b1 的标签并没有任何改变, 这是因为, this 关键字并不是指的 b1 这个按钮, 而是指的 Application 的实例, 所以, 点了按钮之后, 实际上企图修改的是 Application 的标签, 而不是 b1 这个按钮的标签. 因此正确的代码应该是: [复制到剪贴板]CODE:mx:Button idb1 clickb1.label你点了这个按钮一下;/ 原因是这样的: 每个 MXML Application 在保存以后, 实际上都被编译成了一个 AS 3.0 的类(类名跟 MXML 文件名相同), this 指的是这个类本身的实例, 所以 this 的用法跟 AS 2.0 大相径庭, 完全两码事. 总之, 在 AS 3.0 中, this 永远是指当前顶级类的一个实例(对象), 细分下面几种情况: 1. 在 MXML Applcation 文件中, this 永远指的是 Application 的实例; 2. 在 MXML Component 文件中, this 永远指的是 Componet 的实例, 也就是这个文件中根元素的实例; 3. 在 Action Script Class 文件中, this 永远指的是这个 Class 的实例; 4. 如果 MXML Component 和 Action Script Class 都被导入到 MXML Applcation 中, 在这个 MXML Applcation 里 this 关键字依然还是指 Application 的实例, 而不是其中任何子元素的实例. 好了, 这就是我最近研究 AS 3.0 发现的一个典型问题, 希望对大家有帮助 :-) 转载于:https://www.cnblogs.com/wonderKK/archive/2012/05/14/2498911.html