【学习笔记】一个关于在时间轴上编程的问题

【殿堂之路】P98页

这是一个sampleThis.as的类文件,先上源代码:

 1 package 
 2 {
 3     import flash.display.Sprite;
 4     public class sampleThis extends Sprite
 5     {
 6         private var foo:String = "foo in Class Definition!";
 7         public function sampleThis()
 8         {
 9             testThis();
10         }
11         private function testThis():void
12         {
13             var foo:String = "foo in testThis()!!!!";
14             trace(foo);
15             trace(this.foo);
16         }
17     }
18 }
19 
20 
21 /*输出如下:
22 场景 1, 图层'图层 1', 帧 1,2 行1037: 包不能嵌套。
23 */

可以看到输出的结果是:包不能嵌套。

根据自己的分析和上百度搜索答案之后,得到初步的结论:

在时间轴上编程,是不能够加入包的。也就是说,去掉了package,public,private等一些细节的代码之后,就能得到正确的结果。

修改后的代码如下:

 1 var foo:String = "foo in Class Definition!";
 2 function sampleThis()
 3 {
 4     testThis();
 5 }
 6 function testThis():void
 7 {
 8     var foo:String = "foo in testThis()!!!!";
 9     trace(foo);
10     trace(this.foo);
11 }
12 sampleThis();
13 
14 
15 /*输出如下:
16 foo in testThis()!!!!
17 foo in Class Definition!
18 */

特别说明一下:

1 trace(foo);             //输出的是testThis()的foo,即局部属性
2 trace(this.foo);        //输出的是实例属性foo,这是this关键字的用法之一

我的心得:

不知道这种解决方法是不是最佳方式,等深入学习之后再回来看看有没更好的解决方案。

--------------------------------------------------------------------------------

2012/06/21补充说明:

通过学习,发现我的心得里说的话是欠妥的。

其实,以上说的方法只是针对时间轴上编程来说的。真正解决这个问题的办法是要理解“包与类路径”的关系,也就是说,要明白以 .as 为后缀的类文件和以 .fla 为后缀的Flash文件,它们的调用方法的原理。只有这样,才能真正避免上述出现的问题。

最后的解决方案如下:

 1 //sampleThis.as这个文件的绝对路径是:D:\myClass\sampleThis.as,也就是说,它被保存在D盘的一个名叫myClass的文件夹里
 2 //因此,sampleThis类的包名就是它所在的文件夹的名字--myClass!同理,如果路径是D:\myClass\subMyClass\sampleThis.as
 3 //那么,包名就是myClass.subMyClass
 4 
 5 //类文件的写法!
 6 //myClass是包名!
 7 package myClass
 8 {
 9     import flash.display.Sprite;
10     public class sampleThis extends Sprite
11     {
12         private var foo:String = "foo in Class Definition!";
13         public function sampleThis()
14         {
15             testThis();
16         }
17         private function testThis():void
18         {
19             var foo:String = "foo in testThis()!!!!";
20             trace(foo);
21             trace(this.foo);
22         }
23     }
24 }

这个时候,把test.fla文件放在和文件夹myClass的同一个目录中,也就是说,fla的绝对路径是D:\test.fla,上一张图吧:

且test文件代码改为:

1 //导入包myClass里的sampleThis文件
2 import myClass.sampleThis;
3 
4 //初始化sampleThis类的对象,运行并得到上述的结果
5 var test:sampleThis = new sampleThis();

到此,包和类路径,还有就是在时间轴上的编程的学习,就告一段落咯。哈哈哈。继续努力!

 

posted @ 2012-06-20 16:19  louisluo77  阅读(320)  评论(0编辑  收藏  举报