如何删除 For 循环中的所有对象?
How to remove all Objects in For Loop?
大家好所以我知道这必须非常简单我把它复杂化了并且无法弄清楚如何去做。所以我让这些星星在我的 startScreen
背景中移动,我想在游戏开始时将它们移除。
这是我如何在我的 Main Class 中设置它们:
public var numStars:int = 4;
//Add star background to startscreen only
for (var i:int = 0; i < numStars; i++)
{
stage.addChild(new mcStar(stage));
}
在我的 mcStar
Class 中我有这个代码:
public class mcStar extends MovieClip
{
private var stageRef:Stage;
private var starSpeed:Number;
public function mcStar(stageRef:Stage)
{
this.stageRef = stageRef;
setupStar(true);
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}
public function setupStar(randomizeY:Boolean = false) : void
{
//Pick the frames for start position
var nRandom:Number = randomNumber(1, 3);
//Setup goto and stop on timeline
this.gotoAndStop(nRandom);
//inline conditional, looks complicated but it's not.
y = randomizeY? Math.random()*stageRef.stageHeight : 480;
x = Math.random()*stageRef.stageWidth;
alpha = Math.random();
//rotation = Math.random()*360;
//scaleX = Math.random();
//scaleY = Math.random();
starSpeed = 2 + Math.random()*2;
}
public function loop(e:Event) : void
{
y -= starSpeed;
if (y <= stage.stageHeight / 2)
setupStar();
}
public function destroyStar():void
{
if (this.parent)
{
parent.removeChild(this);
removeEventListener(Event.ENTER_FRAME, setupStar);
removeEventListener(Event.ENTER_FRAME, loop);
}
}
//Generates a truly "random" number
function randomNumber(low:Number=0, high:Number=1):Number
{
return Math.floor(Math.random() * (1+high-low)) + low;
}
}
所以我想要完成的是在我的 Main class 中,当用户按下开始时我删除了 startScreen 我希望所有的启动都被删除并停止生成。但我无法弄清楚我将如何删除它们。当我尝试时,我总是得到一个 must be a child of the caller 等...
如有任何帮助,我们将不胜感激!
添加时将星星存储在数组中。方便以后参考。
destroyStar
-功能不是最佳实践,因为明星本身不应该有权更改您的主显示列表中的内容。最好在 Main
中直接删除它。
主要
public var numStars:int = 4;
private var stars:Array = [];
initStars();
function initStars():void{
for (var i:int = 0; i < numStars; i++)
{
var star:mcStar = new mcStar(stage);
addChild(star);
stars.push(star);
}
}
function removeAllStars():void{
for each(var star:mcStar in stars){
if(contains(star)) {
star.destroy();
removeChild(star);
}
stars=[];
}
mcStar
//better name for this class would be McStar for better readability
public function destroyStar():void
{
removeEventListener(Event.ENTER_FRAME, setupStar);
removeEventListener(Event.ENTER_FRAME, loop);
}
此外,您不需要将阶段传递给构造函数。如果在舞台上添加了一个 mcStar
实例,您可以使用 this.stage
引用该舞台(只有一个舞台存在)
你好。
大家好所以我知道这必须非常简单我把它复杂化了并且无法弄清楚如何去做。所以我让这些星星在我的 startScreen
背景中移动,我想在游戏开始时将它们移除。
这是我如何在我的 Main Class 中设置它们:
public var numStars:int = 4;
//Add star background to startscreen only
for (var i:int = 0; i < numStars; i++)
{
stage.addChild(new mcStar(stage));
}
在我的 mcStar
Class 中我有这个代码:
public class mcStar extends MovieClip
{
private var stageRef:Stage;
private var starSpeed:Number;
public function mcStar(stageRef:Stage)
{
this.stageRef = stageRef;
setupStar(true);
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}
public function setupStar(randomizeY:Boolean = false) : void
{
//Pick the frames for start position
var nRandom:Number = randomNumber(1, 3);
//Setup goto and stop on timeline
this.gotoAndStop(nRandom);
//inline conditional, looks complicated but it's not.
y = randomizeY? Math.random()*stageRef.stageHeight : 480;
x = Math.random()*stageRef.stageWidth;
alpha = Math.random();
//rotation = Math.random()*360;
//scaleX = Math.random();
//scaleY = Math.random();
starSpeed = 2 + Math.random()*2;
}
public function loop(e:Event) : void
{
y -= starSpeed;
if (y <= stage.stageHeight / 2)
setupStar();
}
public function destroyStar():void
{
if (this.parent)
{
parent.removeChild(this);
removeEventListener(Event.ENTER_FRAME, setupStar);
removeEventListener(Event.ENTER_FRAME, loop);
}
}
//Generates a truly "random" number
function randomNumber(low:Number=0, high:Number=1):Number
{
return Math.floor(Math.random() * (1+high-low)) + low;
}
}
所以我想要完成的是在我的 Main class 中,当用户按下开始时我删除了 startScreen 我希望所有的启动都被删除并停止生成。但我无法弄清楚我将如何删除它们。当我尝试时,我总是得到一个 must be a child of the caller 等...
如有任何帮助,我们将不胜感激!
添加时将星星存储在数组中。方便以后参考。
destroyStar
-功能不是最佳实践,因为明星本身不应该有权更改您的主显示列表中的内容。最好在 Main
中直接删除它。
主要
public var numStars:int = 4;
private var stars:Array = [];
initStars();
function initStars():void{
for (var i:int = 0; i < numStars; i++)
{
var star:mcStar = new mcStar(stage);
addChild(star);
stars.push(star);
}
}
function removeAllStars():void{
for each(var star:mcStar in stars){
if(contains(star)) {
star.destroy();
removeChild(star);
}
stars=[];
}
mcStar
//better name for this class would be McStar for better readability
public function destroyStar():void
{
removeEventListener(Event.ENTER_FRAME, setupStar);
removeEventListener(Event.ENTER_FRAME, loop);
}
此外,您不需要将阶段传递给构造函数。如果在舞台上添加了一个 mcStar
实例,您可以使用 this.stage
你好。