2016-02-03 3 views
-2

Я изучаю AS3 для проекта класса всего лишь несколько месяцев, большинство из того, что я знаю, смотря на то, как здесь решались другие проблемы.Удалить Ребенок, созданный классом as3

К пункту.

У меня есть класс под названием Generate, поэтому я импортирую его на свою основную шкалу времени, в этом классе он создает дочерний элемент и добавляет его.

Теперь я не могу понять, как его удалить, он всегда говорит, что он имеет значение null: «TypeError: Error # 2007: параметр child должен быть не нулевым».

package { 

import MonsterOne; 
import MonsterTwo; 
import MonsterThree; 
import MonsterFour; 
import flash.display.*; 

public class Generate extends MovieClip{ 

    public static var monsterID = String(monsterID); 
    monsterID = Math.ceil(Math.random() * 4).toString(); 

    public function Generate(parent:Object){ 
     if (monsterID == 1){ 
      var monsOne:MonsterOne = new MonsterOne(); 
      monsOne.name = "monsterOne"; 
      parent.addChild(monsOne); 
      monsOne.x = 100; 
      monsOne.y = 200; 
      trace("spawn1"); 
     } 

Вот как это происходит. Существует немного больше кода для monsTwo, три и четыре. Тот же код отличается от других. Это все, что есть в файле.

Я пробовал все виды, чтобы удалить код, но всегда с ошибкой и фактическим удалением ребенка.

stage.removeChild(monsOne); 
monsOne.parent.removeChild(monsOne); 
removeChild(monsOne); 

И кто знает, сколько еще.

Я что-то упускаю или просто делаю это совершенно неправильно.

Спасибо

--EDIT--

if(o.monHP <= 0) { 
    turnTimer.stop(); 
    turnTimer.removeEventListener(TimerEvent.TIMER, CounterA); 
    var monsOne:MovieClip = getChildByName('monsterOne') as MovieClip; 
    var monsTwo:MovieClip = getChildByName('monsterTwo') as MovieClip; 
    var monsThree:MovieClip = getChildByName('monsterThree') as MovieClip; 
    var monsFour:MovieClip = getChildByName('monsterFour') as MovieClip; 
    parent.removeChild(monsOne); 
    parent.removeChild(monsTwo); 
    parent.removeChild(monsThree); 
    parent.removeChild(monsFour); 

    gotoAndStop('win'); 
} 

Как я пытаюсь удалить ребенка.

package { 

import MonsterOne; 
import MonsterTwo; 
import MonsterThree; 
import MonsterFour; 
import flash.display.*; 

public class Generate extends MovieClip{ 

    public static var monsterID = String(monsterID); 
    monsterID = Math.ceil(Math.random() * 4).toString(); 

    public function Generate(parent:Object){ 
     if (monsterID == 1){ 
      var monsOne:MonsterOne = new MonsterOne(); 
      monsOne.name = "monsterOne"; 
      parent.addChild(monsOne); 
      monsOne.x = 100; 
      monsOne.y = 200; 
      trace("spawn1"); 
     } 

     if (monsterID == 2){ 
      var monsTwo:MonsterTwo = new MonsterTwo(); 
      monsTwo.name = "monsterTwo"; 
      parent.addChild(monsTwo); 
      monsTwo.x = 100; 
      monsTwo.y = 200; 
      trace("spawn2"); 
     } 

     if (monsterID == 3){ 
      var monsThree:MonsterThree = new MonsterThree(); 
      monsThree.name = "monsterThree"; 
      parent.addChild(monsThree); 
      monsThree.x = 100; 
      monsThree.y = 200; 
      trace("spawn3"); 
     } 

     if (monsterID == 4){ 
      var monsFour:MonsterFour = new MonsterFour(); 
      monsFour.name = "monsterFour"; 
      parent.addChild(monsFour); 
      monsFour.x = 100; 
      monsFour.y = 200; 
      trace("spawn4"); 
     } 
    } 
} 

} Полный Сформировать файл

+0

Вы можете использовать, например, ['getChildByName()'] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#getChildByName()) чтобы получить ваш объект, вы можете удалить его ... – akmozo

+1

Чтобы удалить 'monsOne', используйте' parent.removeChild (monsOne); ' – subdan

+0

@akmozo Я пробовал, что все еще получаю ошибку # 2007. Я использовал (http://stackoverflow.com/questions/24040609/action-script-3-how-to-remove-child-which-is-created-from-another-function). Спасибо хоть. Любые другие идеи? –

ответ

0

Generate класс генерирует только один монстр. В функции gameOver вы пытаетесь удалить все 4 монстра, и вы получите сообщение об ошибке, что монстр не существует. Вы должны добавить условия:

+0

Большое спасибо! –

+0

@ Рихард Баррет, пожалуйста! – subdan

+0

Замечательно, что вы получили ответ и уже приняли его, слишком плохо, что ваш код по-прежнему очень не работает и далеко не исправлен. – BotMaster

2

В коде есть так много ошибок, что нелегко узнать, с чего начать. Вам не хватает базового понимания списка отображения и наиболее важной области.

Список Дисплей:

, когда вы делаете что-то вроде этого:

var monsOne:MovieClip = getChildByName('monsterOne') as MovieClip; 
parent.removeChild(monsOne); 

Это можно перевести не «понятия не имею, что я здесь делаю». Зачем? Поскольку код означает, что он ожидает, что DisplayObject с именем «monsterOne» будет существовать в списке отображения «this» (список отображения в области), а затем пытается удалить этот объект из «родителя». Ничего из этого не имеет смысла, если объект существует в отображении список А затем удалить его из отображения списка А не из отображения списка В.

Программирование:

Вы используете переменные и параметры, которые отражают существующие свойства, например: «родитель». Вы уверены, что на вашем уровне программирования вы можете позволить себе путать себя с таким опасным поведением программирования? Ответ - нет, не зеркальные имена свойств.

Область применения:

Вы постоянно теряют объем повсюду, но продолжают писать код, подобный объем даже не существует. Прекрати это. Переменная с именем monsOne в одной области не существует ни в какой другой области действия.

Больше странность:

public static var monsterID = String(monsterID); 
monsterID = Math.ceil(Math.random() * 4).toString(); 

Вы не знаете, что это делает, очевидно, иначе вы бы не сделать это таким образом.

Что делает ваш код делать ?:

Это создает один и один только MovieClip типа и каждый раз, когда он создает его, что дает ему точно такое же имя и добавить его к «родителю» фантомным мы ничего не знаем о. Затем, когда вы пытаетесь удалить его, вы даже не знаете или не помните, что такое этот родитель-фантом, и вы не можете действительно использовать getChildByName() либо потому, что вам нужно знать родителя, чтобы это сделать, а еще хуже, тогда MovieClip может быть там, и все имеют одинаковое имя.

Как исправить?

Этот раздел будет заполнен позже, когда вы зададите конкретные вопросы о том, как исправить что.

+0

Теперь он работает, но спасибо за ваш ввод, имя было установлено в другом файле. Generate.as 'var monsOne: MonsterOne = новый MonsterOne(); monsOne.name = "monsterOne"; ' Как я уже сказал, я новичок, я знаю, что код не особенно хорош. Но это не курс программирования, а дизайн. 'public static var monsterID = String (monsterID); monsterID = Math.ceil (Math.random() * 4) .toString(); ' Следует установить число случайным образом между 1 и 4 и установить его в строку, чтобы я мог называть его else где. Он делает именно то, что я хочу, я не вижу проблемы? Спасибо за внимание. –

Смежные вопросы