Actionscript 3 使用鼠标移除随机生成的精灵。事件

Actionscript 3 使用鼠标移除随机生成的精灵。事件,actionscript-3,Actionscript 3,我正在为我的班级制作一个游戏,不同的化学元素在屏幕顶部产生精灵,然后掉落下来。制作了不同的类型,我希望学生根据他们在游戏中的位置将鼠标悬停在特定类型上。 我的问题是如何编写函数,以便在正确选择它们时删除它们?我尝试了很多不同的方法,但是我遇到了很多麻烦。下面是我编写的用于生成每个元素的代码示例,然后我有一个单独的函数来向下移动所有创建的精灵 var spriteArray:Array = new Array(); var halogenArray:Array = new Array("F", "

我正在为我的班级制作一个游戏,不同的化学元素在屏幕顶部产生精灵,然后掉落下来。制作了不同的类型,我希望学生根据他们在游戏中的位置将鼠标悬停在特定类型上。 我的问题是如何编写函数,以便在正确选择它们时删除它们?我尝试了很多不同的方法,但是我遇到了很多麻烦。下面是我编写的用于生成每个元素的代码示例,然后我有一个单独的函数来向下移动所有创建的精灵

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);
}
var-spriteArray:Array=newarray();
var卤素阵列:阵列=新阵列(“F”、“Cl”、“Br”、“I”);
var rndnum:Number=Math.random();
//卤素
如果(rndnum<0.05)
{
var halo:Sprite=新Sprite();
halo.graphics.Beginll(0x00FF00,1);
光环。图形。画圈(7.5,7.5,15);
halo.graphics.endFill();
halo.addEventListener(MouseEvent.MOUSE_OVER,removeElement);
halo.x=数学随机()*500+50;
光晕y=-18;
var textField=new textField();
textField.text=卤素阵列[int(Math.random()*4)];
textField.width=30;
textField.height=30;
textField.x=(15-textField.textWidth)/2;//水平居中
textField.y=(15-textField.textHeight)/2;//垂直居中
halo.addChild(文本字段);
旋转推送(光晕);
addChild(halo);
}

我相信您正在寻找这样的产品:

//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语句
if(rndnum<0.05)
中这样使用它:


这将替换if语句中的所有当前代码。这都是一个有效的例子,如果你有问题,请随意评论。

你在哪方面挣扎

我假设这是在确定卤素的类型。 在remove函数中,我假设您已经找到了所需的类型,然后将其与 元素.getChildAt(0).text 您可以通过遍历spriteArray中的每个元素或使用MouseeEvent的目标来获取元素

我的建议是使用卤素类来包含Graphics&textfield,并使用向量来保存对象。这样就更容易获得类型,而不是搜索精灵的匿名子级

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