Удалите случайно сгенерированные спрайты с помощью Mouse.Event

Я делаю игру для своего класса, в которой различные химические элементы генерируются в виде спрайтов в верхней части экрана, а затем падают вниз. Различные типы сделаны, и я хочу, чтобы студенты указывали на конкретные типы в зависимости от того, где они находятся в игре. У меня вопрос, как написать функцию, чтобы удалить их, когда они правильно выбраны? Я пробовал много разных способов, но у меня много проблем. Ниже приведен пример кода, который я написал для создания каждого элемента, а затем у меня есть отдельная функция для перемещения всех созданных спрайтов.

var spriteArray:Array = new Array();
var halogenArray:Array = new Array("F", "Cl", "Br", "I");
var rndnum:Number = Math.random();              
//Halogens
if (rndnum < 0.05)
{
var halo:Sprite = new Sprite();  
halo.graphics.beginFill(0x00FF00, 1);
halo.graphics.drawCircle(7.5, 7.5, 15);
halo.graphics.endFill();
halo.addEventListener(MouseEvent.MOUSE_OVER, removeElement);
halo.x = Math.random()*500 + 50;
halo.y = -18;
var textField = new TextField();
textField.text = halogenArray[int(Math.random()*4)];
textField.width = 30; 
textField.height = 30;
textField.x = (15 - textField.textWidth)/2; // center it horizontally
textField.y = (15 - textField.textHeight)/2; // center it vertically
halo.addChild(textField);
spriteArray.push(halo);
addChild(halo);
}

2 ответа

В какой момент вы боретесь?

Я предполагаю, что это в определении типов галогенов. В вашей функции удаления, я предполагаю, что у вас уже есть нужный тип, вы бы сравнили его с element.getChildAt(0).text, и вы бы получили элемент либо зацикливаясь на каждом элементе в spriteArray, либо используя цель mouseEvent

Я предлагаю использовать галогеновый класс для хранения графического и текстового полей, а также вектор для хранения объектов. Тогда будет проще получить тип, чем искать анонимных потомков спрайта.

Я считаю, что вы ищете что-то вроде этого:

//give your textfields a name, it isn't totally necessary as we can do getChildAt(0)
//but it's more readable, and if you decide to add more children before you
//add the text field, then this will still work

var textField = new TextField();
textField.text = halogenArray[int(Math.random()*4)];
textField.width = 30; 
...
textField.name = "haloTx"; //for tracking later

//assuming you have some variable set to the correct answer
var correctAnswer:String = "F";

function removeElement( e:MouseEvent ):void {
    var element:TextField = ( e.target as Sprite ).getChildByName( "haloTx" );

    //if we have the correct element, remove from parent and list
    if ( element && element.text == correctAnswer ) {
        var index:int = spriteArray.indexOf( e.target as Sprite );
        removeChild( spriteArray.splice( index, 1 )[0] );
    }
}

Хотя @VBCPP и прав, делать это в отдельном классе, безусловно, лучший организационный путь. Который может выглядеть примерно так:

class ElementSprite extends Sprite {
    public var textField:TextField;

    //pass shapeArgs as string, so say a circle at x=7.5, y=7.5, and radius=15 -- shapeArgs = "7.5, 7.5, 15"
    public function ElementSprite( element:String, drawShape:String="Circle", shapeArgs:String="7.5, 7.5, 15", fillColor:uint=0x00FF00 ) {
        //set textfield properties etc. or textFormat
        textField = new TextField();
        textField.text = element;
        addChild( textField );

        //if you passed some arguments to draw our shape
        if ( shapeArgs != "" ) {
            graphics.beginFill( fillColor );
            graphics[ "draw" + drawShape ].apply( this, shapeArgs.split( "," ) );
        }
    }

    public function get currentElement():String { return textField.text }
}

Тогда вы бы использовали это так в своем заявлении, если if (rndnum < 0.05):

var elementSprite:ElementSprite = new ElementSprite( "A" );
//elementSprite.x = set your x;
//elementSprite.y = set your y;
addChild(elementSprite);

Это заменит весь ваш текущий код в операторе if. Это все рабочий пример, если у вас есть вопросы, не стесняйтесь комментировать.

Другие вопросы по тегам