flash3.0(Actionscript3.0)问题

发布网友 发布时间:2022-04-22 06:00

我来回答

1个回答

热心网友 时间:2023-05-30 21:50

一个显示对象的stage成员初始值是null,只有在这个显示对象被添加到显示列表之后(被addChild()之后)才会被设置值,才能被访问。

你的main()里建立myRect对象,然后才把这个myRect对象添加到显示列表里,因此在执行myRect类构造函数时,myRect还没有被添加到显示列表,所以它的stage成员是null,你在setPosition()访问stage就会出错。

出这个错误是因为你的类设计不太合理。通常设置一个显示对象的坐标都是这个显示对象的容器的任务,因为只有容器掌握着足够的信息使得它能从整体上把握其内容的相对位置,因此才能决定每一个内容的坐标。

你把setPosition()的工作移到main()里就不会有问题了。如果你仍然希望myRect对象能自己完成居中的设置,那就必须在其构造函数的参数列表里加些东西,比如给他stage对象的引用,或者直接给他stage.stageWidth和stage.stageHeight的值,然后构造函数再把这些传给setPosition()。说到根上,就是myRect对象自己掌握的信息不够。

还有一个解决方案是在myRect中设置一个Event.ENTER_FRAME事件的*,在第一个Event.ENTER_FRAME事件发生的时候进行SetPosition(),因为这个时候myRect对象已经被添加到显示列表中,所以SetPosition()访问stage不会有问题。不过这种技巧是AS 2.0时代的无奈之举,在AS 3.0中不推荐。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com