在我之前的帖子Adding a object randomly on the screen in as3上,我解释了我的具体情况。但我会再次讨论它。我有一个带有类的框(不是我的文档类。我有一个名为Main的文件,但是这个只是一个引用我的框的AS类。)类名是Box,我的MC框导出为Box。这是代码
这是我主要文件中的主要文件
addEventListener(Event.ENTER_FRAME, createbox);
var _box:Box = new Box;
var boxlimit:int = 2;
function createbox (event:Event):void{
_box = new Box;
_box.x = Math.random()*stage.stageWidth ;
_box.y = Math.random()*stage.stageHeight;
addChild(_box);
}
这是我的Box类
//package {
// import flash.display.MovieClip;
// import flash.events.Event;
// import flash.events.MouseEvent;
//
// public class Main extends MovieClip {
//
// public function Main() {
// createBox();
//
// }
//
// private function createBox():void {
//
// trace(Math.random()*stage.stageWidth)
// _box.x = Math.random()*stage.stageWidth ;
// _box.y = Math.random()*stage.stageHeight;
// stage.addChild(_box);
//
// }
// }
//}
在我尝试上面的内容之前,这实际上就是课堂上的内容,但我宁愿保留课堂上的所有代码。
有什么建议吗?
答案 0 :(得分:0)
这是一种方法: 为MovieClip设置类名(导出为actionscript类)时,可以选择为剪辑指定基类。您可以在此基类中添加随机位置代码,如下所示:
public class BoxBase extends MovieClip
{
public function BoxBase()
{
super();
addEventListener(Event.ADDED_TO_STAGE, _onStaged);
}
public function _onStaged(event:Event):void
{
this.x = Math.random()*stage.stageWidth;
this.y = Math.random()*stage.stageHeight;
}
}
请注意ADDED_TO_STAGE事件侦听器。既然代码在你的MC中,你必须等到它被添加到显示列表(放在舞台上或作为舞台上剪辑的子节点)之后才能引用“stage”变量。
一旦你将BoxBase设置为Box的基类,你可以通过在文档类中放置以下代码,在随机位置创建一个新的Box实例:
var b:Box = new Box();
addChild(b);
答案 1 :(得分:0)
这里的情况与上一个问题相反。在createBox()函数之外声明一个Box变量,因此在函数内重新声明变量不会创建更多的框。
//It should be something like this, without the
// need to declare the _box variable outside the
// function.
// As dugulous points out you have to make sure that
// stage is not null before calling this
function createbox (event:Event):void
{
if( stage != null )
{
var _box = new Box;
_box.x = Math.random()*stage.stageWidth ;
_box.y = Math.random()*stage.stageHeight;
addChild(_box);
}
}
在您的示例中,您使用EnterFrame事件添加您的框...您需要多少?一个计时器可以让你更多地控制盒子的数量,也更容易停止。
var delay:int = 500; // in milliseconds
var numBoxes:int = 2000;
// you could add an optional limit
var timer:Timer = new Timer( delay , numBoxes );
// var timer:Timer = new Timer( delay ); would work too
timer.addEventListener( TimerEvent.TIMER , createBox );
timer.start();
//Change createBox() accordingly...
function createbox (event:TimerEvent):void
{
var _box = new Box;
_box.x = Math.random()*stage.stageWidth ;
_box.y = Math.random()*stage.stageHeight;
addChild(_box);
}
每当你厌倦了添加盒子时,你只需要调用它
timer.stop();
答案 2 :(得分:0)
package
{
import flash.events.Event;
import flash.display.MovieClip;
public class Main extends MovieClip
{
private var _box:Box;
public function Main()
{
addEventListener(Event.ENTER_FRAME, createbox);
}
private function createbox (event:Event):void
{
_box= new Box();
_box.x = Math.random()*stage.stageWidth ;
_box.y = Math.random()*stage.stageHeight;
addChild(_box);
}
}
}