当前位置: 代码迷 >> Web开发 >> 关于FLASH AS3的一些代码结构有关问题的疑惑
  详细解决方案

关于FLASH AS3的一些代码结构有关问题的疑惑

热度:406   发布时间:2014-02-14 16:53:24.0
关于FLASH AS3的一些代码结构问题的疑惑
AS3只能说使用上还不太习惯,看的相关教程也只是把动画和数学的东西结合的不错,不过却忽略的本身对AS3语法结构和实际使用中的规则的说明。现把最近的两个问题罗列于下,还请各位帮忙分析分析。

1.可能是刚接触AS3时候最让我不习惯的东西,就是这个package。接触过之前的AS2,或者其他的编程语言,但一般只是函数或者更高级的类,但package这个东西,既不是函数,也不是类,按字面意思就是个包,但使用上感觉也挺奇怪,
(1)不能在一个包内书写1个以上的class。
(2)另外书写的class也需要放在package中,而不是单独书写class
(3)同目录的包可以不用import包含,而子目录则需要用import包含
所以想知道这些限制的出发点是什么,因为用常规的编程语言,很多情况下主要书写一个主代码,其中需要用到的类用包含命令包含进来即可,当然这些类你可以写在一个文件中,或者按功能分为不同文件。
另外package在AS3中所扮演的是什么角色。

2.关于addChild引出的作用域问题,先说下我的实现(用的是FLASH CS5.5)
(1)建立一个index.fla文件,为该文档设置类的参数 在输入框中填写Main
(2)建立一个Main.as存放在和index.fla同一级别目录下 Main.as代码如下

package  {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;

public class Main extends Sprite{

public function Main() {
// constructor code
init();
}

public function init(){
var a = new ESmain();
/*
var myText:TextField = new TextField();
myText.text = "123";
myText.x = 100;
myText.y = 100;
addChild(myText);
*/
}
}
}

(3)建立ESmain.as 同样存放在同一目录下 该文件的代码如下

package  {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;

public class ESmain {
public var myText:TextField;
public var icount:int;

public function ESmain() {
// constructor code
this.myText = new TextField();
this.icount = 0;
}

public function showtext():void{
myText.text = icount.toString();
myText.x = 100;
myText.y = 200;
addChild(myText);
}
}
}

目前的运行时的错误提示为 ESmain.as,20 行 1180: 调用的方法 addChild 可能未定义。
但如果将Main.as的var a = new ESmain(); 再把下面的/* */注释去掉,则可以正常运行,显示一个文本框。
这里的addChild应该省略了默认的对象值,但不明白为什么在非主package中调用就出错了。
FLASH AS3
包就是个命名空间嘛,比如天朝有几千个张三,怎么区分这么多同名字的人呢,只好用其他的方法来区分了,使用类的时候也要导入相应的包,不然编译器怎么知道你想用那个类呢。
第2个问题 public class ESmain {}
改成 public class ESmain extends Sprite{
就可以了,因为ESmain不是显示对象,只有显示对象才能addChild到舞台了,
或者继承DisplayObject或MovieClip都行
  相关解决方案