0

私を助けてください。

オフライン マップで作業しており、XML からデータを読み取ります。データを DataGrid に入れ、データグリッドからアイテムを選択すると、ステージに子を追加し、データのムービークリップを作成します (一度に複数の子である可能性があります) が、データグリッドから別のアイテムを選択すると、新しい子が追加されましたが、古いものは削除されません。

これは私のコードです:

    familyGrid.addEventListener(Event.CHANGE, get_data2);

function get_data2(event:Event):void {

//get the selected item's name and search in another xml file 

//for the points that have the same name

nameFamilyText.text= familyGrid.selectedItem.Latin;

var pattern_pID2:RegExp;

current_pID2 = [];

pattern_pID2 = new RegExp(nameFamilyText.text);

for (var n:int = 0; n<all_pID2.length; n++)

{

if ((pattern_pID2.test(all_pID2[n].fLatinName) || nameFamilyText.text=="") )

{

current_pID2.push(all_pID2[n]);

var fxnList:XMLList = pID_data2.marker.(@LatinName == nameFamilyText.text);

for each (var xnNode:XML in fxnList)

fButtonName.text= xnNode.@LatinName.toXMLString()

//create marker in the satge which have a n image of offline map

// i need to remove the old one before add a new one

var newString:String = ("id_"+all_pID2[n].id);

var markLoader:Loader = new Loader();

var myMark:String= ("T copy.png");

markLoader.load(new URLRequest (myMark));

markLoader.x=this[newString].x-8;

markLoader.y=this[newString].y-20;

addChild(markLoader);

markLoader.addEventListener(MouseEvent.CLICK, getToolTip);

function getToolTip(e:MouseEvent) {

var flabel:TextField = new TextField();

flabel.width=150;

flabel.height=20;

flabel.border=true;

flabel.background=true;

flabel.autoSize=TextFieldAutoSize.RIGHT;

flabel.text=xnNode.@Species_name.toXMLString();

flabel.x=markLoader.x-30;

flabel.y=markLoader.y-20;

addChild(flabel);

flabel.addEventListener(MouseEvent.CLICK, fShowData);

function fShowData(e:MouseEvent) {

///create movieclip for data    

var fmc:MovieClip = new MovieClip();

fmc.graphics.beginFill(0x000000, .75);

fmc.graphics.drawRect(60, 90, 700, 500);

fmc.graphics.endFill();

fmc.x = 80;

fmc.y = 60;

addChild(fmc);

}}}

updateList2();

}}  
4

1 に答える 1

0

追加したいムービークリップをコンテナー ムービークリップに入れるだけです。多分このようなもの:

familyGrid.addEventListener(Event.CHANGE, get_data2);
var familyContainer = new MovieClip();
addChild(familyContainer);

get_data2 関数で、次に行います

function get_data2(event:Event):void {
    ...
    removePreviousChildren();
    familyContainer.addChild(markLoader);
    ...
}

function removePreviousChildren() {
    while(familyContainer.numChildren > 0) {
        familyContainer.removeChild(familyContainer.getChildAt(0))
    }
}
于 2013-08-05T11:52:49.440 に答える