Actionscript 3 使用数组中剪辑的名称将Circle添加到现有movieclip

Actionscript 3 使用数组中剪辑的名称将Circle添加到现有movieclip,actionscript-3,Actionscript 3,我目前正在建设一个项目,我有一个地图与一些船舶和飞机。我试图实现的是检查它们之间的视线距离。 我设置了一个服务水平计算器,它检查一个站台的高度和第二个站台的高度,然后给出响应。那很好 然后我想根据这个计算器的结果添加Circle。因此,如果结果是10,它将画一个半径为10厘米的圆。如果结果是100,那么它将在100绘制它,你得到了图片。这很有效 我现在的问题是,我需要能够在计算之前或之后单击一个平台,并将.addCircle添加到该movieClip中。我已经设置了一个数组来存储moviecli

我目前正在建设一个项目,我有一个地图与一些船舶和飞机。我试图实现的是检查它们之间的视线距离。 我设置了一个服务水平计算器,它检查一个站台的高度和第二个站台的高度,然后给出响应。那很好

然后我想根据这个计算器的结果添加Circle。因此,如果结果是10,它将画一个半径为10厘米的圆。如果结果是100,那么它将在100绘制它,你得到了图片。这很有效

我现在的问题是,我需要能够在计算之前或之后单击一个平台,并将.addCircle添加到该movieClip中。我已经设置了一个数组来存储movieclips实例名,并对其进行了跟踪。我在舞台上添加了一个字段,这样你可以点击一个平台,它会识别点击的平台。我只是不知道如何让圆圈进入已点击的电影唇

我对AS3很陌生,所以这开始困扰我。任何帮助都将不胜感激

我的代码附在下面。我希望我已经正确地插入了这个。再次感谢

import flash.events.MouseEvent;
import flash.display.MovieClip;

stage.focus=ht1;


// creation of array containing movieclips and code that adds the clicked movieclip to Array-platformClicked
var platformArray:Array = [arunta_mc, f15_mc];
var platformClicked = [];
var selectedPlatform:MovieClip = new MovieClip();

for(var i:int = 0; i < platformArray.length; i++) {
    platformArray[i].buttonMode = true;
    platformArray[i].addEventListener(MouseEvent.CLICK, item_onClick);
}

function item_onClick(event:MouseEvent):void {
    var selectedPlatformArray:Array = platformArray.filter(checkName);
    selectedPlatform = selectedPlatformArray[0];
    myText.text = event.currentTarget.name + " was clicked";
    var platformClicked = String(event.currentTarget.name);
trace(platformClicked);
}



function checkName(item:MovieClip, index:int, array:Array):Boolean
{
    return(item.name == platformClicked);
}



//setup of LOS Calculator code
var counter:Number=1;
operator_txt.text = "+";
ht1.restrict="-0123456789.";
ht2.restrict="-0123456789.";
var myresult:Number;
var test = [];

//start of code when equal button is pressed
equal_btn.addEventListener(MouseEvent.CLICK, equalhandler);
var newCircle:Shape = new Shape();//defines circle to be drawn

    function equalhandler(event:MouseEvent):void{
        newCircle.graphics.lineStyle(1, 0x000000);
        newCircle.graphics.beginFill(0x435632);
        newCircle.alpha = .1;
    //start of result code
    result_txt.text = String(int((1.23*(Math.sqrt(Number(parseFloat(ht1.text)+parseFloat(ht2.text)+""))))));
    var test = String(int((1.23*(Math.sqrt(Number(parseFloat(ht1.text)+parseFloat(ht2.text)+""))))));
    trace(test);
    //end of result code
    newCircle.graphics.drawCircle(0,0,test);//add circle based on LOS calculation
    newCircle.graphics.endFill();
    //var selectedPlatform:MovieClip = selectedPlatformArray[0];
    selectedPlatform.addChild(newCircle);//this is where I need to add newCircle to the movieClip that is clicked
    trace(selectedPlatform);
//trace(platformClicked);
}


//start of code for the clear button
clear_btn.addEventListener(MouseEvent.CLICK, clearhandler);
function clearhandler(event:MouseEvent):void{
ht1.text=ht2.text=result_txt.text="";
removeChild(newCircle);
var test = [];
}
导入flash.events.MouseEvent;
导入flash.display.MovieClip;
阶段。焦点=ht1;
//创建包含movieclip的数组和将单击的movieclip添加到数组平台的代码单击
var platformArray:Array=[arunta_mc,f15_mc];
var platformClicked=[];
var selectedPlatform:MovieClip=新的MovieClip();
对于(变量i:int=0;i
您可以使用
过滤器()
方法检查每个项目的名称,如下所示:

var selectedPlatformArray:Array = platformArray.filter(checkName);
var selectedPlatform:MovieClip = stage.getChildByName(platformClicked);
在代码的某个地方,定义
checkName
函数

function checkName(item:MovieClip, index:int, array:Array):Boolean
{
    return (item.name == platformClicked);
}
selectedPlatformArray
现在将包含
checkName
函数返回
true
的所有元素,并且只要没有多个同名的
MovieClips
,数组就应该只包含一个元素,只需访问数组的第一个元素即可检索:

var selectedPlatform:MovieClip = selectedPlatformArray[0];
或者,您也可以使用
getChildByName()
函数,如下所示:

var selectedPlatformArray:Array = platformArray.filter(checkName);
var selectedPlatform:MovieClip = stage.getChildByName(platformClicked);
但是,这取决于对象添加到的位置,如果它们不都在同一个容器中(或者根本不添加),那么这不是最好的选择。不过,对于小型项目来说,这是一个快速而简单的解决方案

无论如何,无论使用何种方法,您都可以像往常一样在
equalHandler
函数中轻松地将圆添加到圆中:

selectedPlatform.addChild(newCircle);
我建议查看和的文档,以便更好地了解它们是如何工作的,因为我的示例仅显示了在这种特定情况下如何使用它们


完成您应该拥有的代码:

import flash.events.MouseEvent;
import flash.display.MovieClip;

stage.focus=ht1;


// creation of array containing movieclips and code that adds the clicked movieclip to Array-platformClicked
var platformArray:Array = [arunta_mc, f15_mc];
var platformClicked:String = "";
var selectedPlatform:MovieClip = new MovieClip();

for(var i:int = 0; i < platformArray.length; i++) {
    platformArray[i].buttonMode = true;
    platformArray[i].addEventListener(MouseEvent.CLICK, item_onClick);
}

function item_onClick(event:MouseEvent):void {
    var selectedPlatformArray:Array = platformArray.filter(checkName);
    selectedPlatform = selectedPlatformArray[0];
    myText.text = event.currentTarget.name + " was clicked";
    platformClicked = String(event.currentTarget.name);
    trace(platformClicked);
}



function checkName(item:MovieClip, index:int, array:Array):Boolean
{
    return(item.name == platformClicked);
}



//setup of LOS Calculator code
var counter:Number=1;
operator_txt.text = "+";
ht1.restrict="-0123456789.";
ht2.restrict="-0123456789.";
var myresult:Number;
var test:String = "";

//start of code when equal button is pressed
equal_btn.addEventListener(MouseEvent.CLICK, equalhandler);
var newCircle:Shape = new Shape();//defines circle to be drawn

function equalhandler(event:MouseEvent):void{
    newCircle.graphics.lineStyle(1, 0x000000);
    newCircle.graphics.beginFill(0x435632);
    newCircle.alpha = .1;
    //start of result code
    result_txt.text = String(int((1.23*(Math.sqrt(Number(parseFloat(ht1.text)+parseFloat(ht2.text)+""))))));
    test = String(int((1.23*(Math.sqrt(Number(parseFloat(ht1.text)+parseFloat(ht2.text)+""))))));
    trace(test);
    //end of result code
    newCircle.graphics.drawCircle(0,0,test);//add circle based on LOS calculation
    newCircle.graphics.endFill();
    //var selectedPlatform:MovieClip = selectedPlatformArray[0];
    selectedPlatform.addChild(newCircle);//this is where I need to add newCircle to the movieClip that is clicked
    trace(selectedPlatform);
    //trace(platformClicked);
}


//start of code for the clear button
clear_btn.addEventListener(MouseEvent.CLICK, clearhandler);
function clearhandler(event:MouseEvent):void{
    ht1.text=ht2.text=result_txt.text="";
    selectedPlatform.removeChild(newCircle);
    test = "";
}
导入flash.events.MouseEvent;
导入flash.display.MovieClip;
阶段。焦点=ht1;
//创建包含movieclip的数组和将单击的movieclip添加到数组平台的代码单击
var platformArray:Array=[arunta_mc,f15_mc];
var platformClicked:String=“”;
var selectedPlatform:MovieClip=新的MovieClip();
对于(变量i:int=0;i