Название довольно расплывчато, извините за это. Не могу придумать, как задать этот вопрос в одном предложении.AS3 Удаление объекта с этапа
я буду суммировать то, что мой код должен делать:
- Запрашивает пользователя число между 1-99. Это число - количество мин, которые появятся на сцене.
- Как только шахты появляются на сцене, пользователь может щелкнуть любую шахту, и произойдет «взрыв».
- Шахта, которая только что взорвалась, будет удалена со сцены.
- Затем «взрыв» отправит ближайшие два.
- Эти две мины будут удалены со сцены, а еще две мины будут выключены. (т.е. цепная реакция)
У меня есть шаги 1-3. У меня возникают проблемы с «откладыванием» ближайших двух мин (т.е. удаление со сцены).
Я дал возможность определить два ближайших мин от последнего взорванного, но я не могу найти способ их удаления.
Код:
package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.events.*;
public class Minefield extends MovieClip
{
var inputNumber:int;
var iField:TextField = new TextField();
var button:iButton = new iButton();
var i:int;
var mines:Array = new Array();
public function Minefield()
{
var explosion:iExplosion = new iExplosion();
iField.type = "input";
iField.height = 18;
iField.x = 460;
iField.y = 275;
iField.border = true;
iField.restrict = "0-9";
iField.maxChars = 2;
stage.focus = iField;
addChild(iField);
addChild(button);
button.x = 450;
button.y = 175;
button.buttonMode = true;
button.addEventListener(MouseEvent.CLICK, UponClick);
}
function AddMines()
{
for (i = 0; i < inputNumber; i++)
{
CreatorOfMine();
mines[i].addEventListener(MouseEvent.CLICK, UponMineClick)
mines[i].buttonMode = true;
}
}
function CreatorOfMine()
{
mines[i] = new Mine();
MineLocation()
}
function MineLocation()
{
mines[i].x = Math.round(Math.random() * 925);
mines[i].y = Math.round(Math.random() * 525);
mines[i].rotation = Math.random() * 360;
addChild(mines[i]);
}
function UponClick(e:MouseEvent)
{
inputNumber = int(iField.text);
RemoverOfChildren();
}
function RemoverOfChildren()
{
removeChild(button);
removeChild(iField);
AddMines();
}
function UponMineClick(event:MouseEvent)
{
var mineObject:Mine = Mine(event.currentTarget)
var expl:iExplosion = new iExplosion()
expl.x = mineObject.x
expl.y = mineObject.y
expl.rotation = mineObject.rotation
addChild(expl)
removeChild(mineObject)
ChainReaction(mineObject)
}
function ChainReaction(mineObject:Mine)
{
Distances(mineObject,i)
}
function Distances(mineObject:Mine, i:int)
{
var DistanceArray:Array = new Array()
var x1:Number = mineObject.x;
var y1:Number = mineObject.y;
for (var q:int = 0; q < (mines.length); q++){
if (q != i){
var x2:Number = mines[q].x
var y2:Number = mines[q].y
var dy:Number = y2 - y1
var dx:Number = x2 - x1
var dist:Number = Math.sqrt(Math.abs(dx*dx + dy*dy))
if (dist != 0)
{
DistanceArray[q] = [dist]
//trace(dist)
trace(DistanceArray[q])
}
else if (dist == 0)
{
continue
}
}
}
FindNearestMines(DistanceArray)
}
function FindNearestMines(DistanceArray:Array){
DistanceArray.sort(Array.NUMERIC);
// Sorted my distances numerically so that I can figure out the closest two. How do I remove those two mines from the stage?
}
}
}
У вас есть мины в массиве. Не можете ли вы просто использовать что-то вроде removeChild (мины [x])? –
Ухм, но как? Я не знаю, кто мой. В принципе, в одном массиве у меня есть мины, но в случайных местах. В другом случае у меня есть расстояния от одной шахты до всех других шахт. Поскольку мне нужно удалить ближайшие два, я отсортировал массив численно, и с этим я знаю, что первые два нужно удалить. removeChild (DistanceArray [0,1]) не работает, очевидно, потому что ничего в этом массиве не находится на сцене. –
Не уверен, что вы можете удалить 2 детей одновременно. Hve вы попробовали removeChild [0] и removeChild [1]? Кроме того, я обнаружил, что вам иногда приходится удалять такой объект: object.parent.removeChild (object). –