本节书摘来自异步社区《ActionScript 3.0基础教程》一书中的第2章,第2.2节,作者: 【美】Doug Winnie 更多章节内容可以访问云栖社区“异步社区”公众号查看。
在Flash中,有一些规则定义了元件是如何被显示在屏幕上的,所有可以显示的元件都来自一个特殊的地方,我们叫它“显示队列”。显示队列中列出了所有你可以添加或者删除的对象,因为你是用ActionScript来创建对象的,所以这些对象在你没有把它们加入显示队列前是不会显示出来的。
为什么需要显示队列呢?有时,你会需要创建对象并且还能对它进行修改,但是并不需要将对象显示出来给用户看见。这个对象也许是一个没有准备好使用的元件,或者是需要隐藏起来的东西,对象实际上是在那的,只是用户看不见而已。
在过去,Flash用户会通过设置.visible属性值为false来隐藏元件,或者也可以设置.alpha为0达到同样效果,但是如果你有非常多的元件,这会让程序运行速度变慢。
2.2.1 在舞台上创建新对象现在你已经对显示队列有了一定的了解,让我们写点代码实践一下。从库中创建ActionScript对象对你来说应该已经不成问题了,因为你学习了类和显示队列。
在我们用代码创建圆圈以前,你需要把舞台上的东西都清除掉。
1.选中舞台上的圆圈,删除它。
2.在当前项目中创建一个新的时间轴层。
3.取名新的层叫scripts。
4.选中新层的空白第一帧。
5.打开动作面板。
6.在动作面板中,加入下面的代码:
var myCircle:BlueCircle = new BlueCircle(); addChild(myCircle); trace(myCircle);输入代码后,你的界面应该如图2.5所示。
7.运行程序。你会发现蓝色圆圈被显示在了左上角(图2.6),这是因为圆圈对象在被创建的时候就有了初始坐标值0,0,也就是左上角。
让我们分析一下这几句代码,第一行:
var myCircle:BlueCircle = new BlueCircle();可以这样理解,一个叫做myCircle的对象被创建,它被赋值成了BlueCircle类的一个实例,过程如图2.7所示。
在这组插图中,第一组展示了你正在创建一个叫做myCircle的对象。在以后的章节里你会学到更多关于var语句的内容,现在只要记住你创建的新对象叫做myCircle。接下来注意你库中的BlueCircle“便利贴堆”,或者我们可以正式的叫它类。第二组图片展示了你正在从便利贴堆中抽出一张,使用的是new语句,创建了BlueCircle类的实例。当实例刚被创建好时,它还没有名字。
第三组图片展示了还没有名字的BlueCircle实例被赋给了已经命名的myCircle对象。对对象进行操作一定要做这样的赋值,因为我们只能操作有名字的实例。
这个过程和直接把对象从库中拖拽到舞台上并给它取名是完全相同的效果。
看第二行代码:
addChild(myCircle);这行代码表示将蓝色圆圈加入显示队列,它就能被用户看见了。addChild语句会将括号中的对象加入到显示队列中。
当Flash开始运行时,Flash会不断地检查显示队列,把其中的对象显示到屏幕上,蓝色圆圈已经在显示队列里,所以你能看见它。
看最后一行代码,它在显示面板中输出了一段奇怪的字符串:
trace(myCircle);这一行代码是将整个对象输出到了显示面板。注意显示面板是这样显示的:
[object BlueCircle]因为对象没有可显示的字符串,所以trace语句就自动往显示面板输出表明对象是BlueCircle的实例的字符串。
2.2.2 搅乱显示队列现在你更新一下代码来进一步了解显示队列是如何工作的。
1.把代码改成这样:
var myCircle:BlueCircle = new BlueCircle(); // addChild(myCircle); trace(myCircle);当你在第二行代码前加上双斜杠时,你正在做的操作我们称之为“注释”。在下一节你会了解到更多关于注释的知识,现在先记住这两个斜杠让这段代码不在起作用,Flash运行时会忽略掉这一行。注意代码现在变成了灰色,这是注释的默认颜色(图2.8)。
myCircle对象因为缺少了addChild语句,没有被加入显示队列。
2.运行代码,你会看见一个空的页面。
检查显示面板,你会看见trace还是输出了同样的内容,这是因为对象是存在的,只是没有被放入显示队列中(图2.9)。
这是非常多新手都会犯的的错误,创建了新的实例对象,忘记把它加入显示队列,你会发现运行程序时没有任何错误,因为对象是存在的,但是你忘了告诉Flash要把它显示出来。
3.删除双斜杠,把addChild语句还原。
4.再次运行程序,你会重新在页面中看见圆圈。
2.2.3 改变动态创建的对象的属性如果你想把对象放在你想要的位置,你可以在对象被创建后设置x,y属性的值。
1.更新代码,把赋值语句放在对象被new语句创建之后。
var myCircle:BlueCircle = new BlueCircle(); ****myCircle.x = 150;**** **myCircle.y = 100;** **addChild(myCircle);** trace(myCircle);2.运行代码,对象被显示在了150,100位置(图2.10)。
相关资源:actionscript3.0游戏实例教程