2011-03-30 2 views
0

나는 스나이퍼 게임을하고 있는데, 캐릭터를 클릭하여 그를 죽이면 내가 겪는 문제를 해결하려고합니다. 어쨌든, MovieClip의 긴 sotry 짧은 인스턴스가 여러 개 만들어지고 if 문이 실행될 때 동시에 제거해야합니다. 가능하면 코드가 무엇입니까?AddChild 함수에서 호출 한 모든 인스턴스를 제거하려면 어떻게합니까?

코드 :

stop(); 
Mouse.hide(); 


var blood:Array = []; 

// after you create your clips your needing to keep track of. 


var level_complete1:level_complete = new level_complete(); 
var ammo:Number = 5; 
var cash:Number= 100; 
var level:Number = 1; 
var exp:Number = 0; 
var blood_c:Number = 0; 
var exp_needed = 25; 
var dead_check:Number = 0; //Check to see if the target is dead 
var check_blood:Number = 0; //Check to make sure blood doens't loop 
var blood_splat1:blood_splat = new blood_splat(); 
blood.push(blood_splat1); 

target1.addEventListener(MouseEvent.CLICK, target_shot); 
function target_shot(event:MouseEvent):void{ 
    if(dead_check==0){ 
     addChild(blood_splat1); 
     blood_splat1.y = mouseY; 
     blood_splat1.x = mouseX; 
     target1.gotoAndPlay(32); 
     if (blood_splat1.currentFrame==6){ 
      //blood_splat1.gotoAndStop(6); 
      //removeChild(blood_splat1); 
      cash=cash+150; 
      exp=exp+25; 
      ammo=ammo-1; 
      dead_check = 1; 
      blood_c = 1; 

      } 
     } 
    if (dead_check==1){ 
     addChild(blood_splat1); 
     blood_splat1.y = mouseY; 
     blood_splat1.x = mouseX; 
     target1.gotoAndStop(38); 
     blood_c = 1; 
     //if (blood_splat1.currentFrame==6){ 
      //blood_splat1.gotoAndStop(6); 

    if (blood_c==1){ 
     for each(var mc:MovieClip in blood){ 
      mc.parent.removeChild(mc); 
      blood.splice(blood.indexOf(mc), 1); 
} 
     } 

      } 



    } 
+0

변경 var에 MC 이건 정말 엠씨 때문에 문제가되지해야 혈액 blood_splat는 스프라이트에서 파생하고 blood_splat는 스프라이트 나 MC 중 하나를이어야 내가. 그걸로 문제가 보이지 않습니다. 널 참조 가능성을 참조하십시오.하지만 지금 당장 당신의 문제가되지 않습니다. – Feltope

+0

혈액 movieclip 여전히 제거되지 않습니다. 어떤 아이디어? –

+0

코드에 100 % 확신하고 있습니까? 스틱 흔적 ("어쩌구"); 바로 앞에 각 – Feltope

답변

1

편집 : 여기 좋아, 내가 테스트에서 볼 수있는 문제입니다. blood_c가 1로 설정되지 않아 혈액 스플래트가 제거되지 않습니다. 만약 당신이 그것을 강제하면 (테스트를 위해 나는 그것을 1로 만들었습니다.) 그것이 생성 된 후에 즉각 제거되기 때문에 당신은 결코 혈액 스플래트를 보지 못할 것입니다.

제 조언은 처음 addChild (blood_splat1); 너는 타이머를 만든다. 또는 프레임 카운터. 또는 뭔가를하고 카운트 다운 또는 화재 때 (타이머처럼이 같이 혈액 플랫를 제거하는 함수를 호출합니다.

stop(); 
Mouse.hide(); 


import flash.utils.Timer; 
import flash.events.TimerEvent; 

var bloodTimer:Timer = new Timer(1000, 1); // one second and doesn't repeat. 

//var level_complete1:level_complete = new level_complete(); 
var ammo:Number = 5; 
var cash:Number= 100; 
var level:Number = 1; 
var exp:Number = 0; 
var blood_c:Number = 0; 
var exp_needed = 25; 
var dead_check:Number = 0; //Check to see if the target is dead 
var check_blood:Number = 0; //Check to make sure blood doens't loop 
var blood_splat1:blood_splat = new blood_splat(); 

target1.addEventListener(MouseEvent.CLICK, target_shot); 

function removeBlood(te:TimerEvent):void 
{ 
    if(blood_splat1.parent != null && blood_splat1.parent.contains(blood_splat1)) 
    { 
     blood_splat1.parent.removeChild(blood_splat1); 
    } 
} 

function target_shot(event:MouseEvent):void 
{ 
    if(dead_check==0) 
    { 
     addChild(blood_splat1); 
     bloodTimer.start(); 
     bloodTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeBlood); 
     blood_splat1.y = mouseY; 
     blood_splat1.x = mouseX; 
     target1.gotoAndPlay(32); 
     if (blood_splat1.currentFrame==6) 
     { 
      //blood_splat1.gotoAndStop(6); 
      //removeChild(blood_splat1); 
      cash=cash+150; 
      exp=exp+25; 
      ammo=ammo-1; 
      dead_check = 1; 
      blood_c = 1; 

     } 
    } 
    if (dead_check==1) 
    { 
     addChild(blood_splat1); 
     bloodTimer.start(); 
     bloodTimer.addEventListener(TimerEvent.TIMER_COMPLETE, removeBlood); 
     blood_splat1.y = mouseY; 
     blood_splat1.x = mouseX; 
     target1.gotoAndStop(38); 
     blood_c = 1; 
     //if (blood_splat1.currentFrame==6){ 
      //blood_splat1.gotoAndStop(6);} 
    } 
} 
+0

blood_splat 하위가 표시되지만 삭제되지 않습니다. 내 코드가 위에 있습니다 .... –

+0

방금 ​​테스트했는데 완벽하게 작동했습니다. -/ – Feltope

+0

Ugg, 그럼 왜 저에게는 효과가 없습니까? –

0

다운 더러운, 당신은이 작업을 수행 할 수 있습니다 (그러나 그것의 아이를 제거하지 않습니다 var에 MC 혈액에서 무비 클립 : 어린이) :

while (numChildren > 0) { 
    removeChild(getChildAt(0)); 
} 
+1

아이들의 아이들에게 이상한 청취자 나 무언가가있는 경우를 제외하고는 가비지 컬렉터가 고아가되기 때문에 조만간 그들을 괴롭 히게됩니다. – Feltope

관련 문제