2016-12-06 4 views
-1

Я удивлен, что не знаю, как это сделать, но, как оказалось, я действительно этого не делаю; просто поставил, я пытаюсь сделать шутер с боковой прокруткой, основной и в нем, у меня есть 50 звезд, появляющихся на экране через цикл «за» в начале игры. Существует функция, которая делает это, и слушатель находится в начале. Проблема в том, что когда вы проиграете игру и вернетесь в главное меню, появится еще 50 звезд, чего я не хочу. Итак, я пытаюсь выполнить проверку «if» в начале, так что игра проверяет, есть ли экземпляр/фрагмент ролика объекта/символа звезды, прежде чем определять, должна ли вызываться функция, которая порождает звезды слушатель. Итак, как мне это сделать? Я просмотрел некоторые другие чеки, и они не помогли, поскольку представленные коды были здесь очень разными, и поэтому я просто получаю ошибки.Проверьте наличие экземпляра объекта

Сообщите мне, если вам требуется более подробное объяснение, или если вы хотите увидеть какой-то код. Обратите внимание, что в игре уже есть много кода, поэтому просто дать все это, вероятно, не поможет.

+1

Correct. Предоставление всего этого не помогло бы. Мы предлагаем вам сделать пример, который настолько прост, насколько это возможно, что вызывает ту же проблему. Часто это вы сами обнаружите, но если нет, это дает нам отличный способ увидеть вашу проблему в действии на наших компьютерах. –

ответ

1

Предлагаю вам пересмотреть свой подход. Вы фокусируетесь на том, были ли созданы экземпляры. Это нормально, но не самый простой способ подумать об этом.

Я хотел бы сделать это вместо того, чтобы

private function setup():void{ 
    loadLevel(1); 
    addListeners(); 
    loadMusic(); 
    // etc... 
    // call all functions that are needed to just get the app up and running 
} 

private function loadLevel(lev:int):void{ 
    addStars(); 
    // call all functions that are needed each time a new level is loaded 
} 

private function restartLevel():void{ 
    // logic for restarting level, 
    // but this *won't* include adding star 
    // because they are already added 
} 

Есть другие способы сделать это, но это имеет смысл для меня, чем ваш подход. Я всегда нарушаю свои игровые функции на более мелкие биты логики, чтобы их можно было использовать повторно. Ваши основные функции рабочей лошадки должны (IMHO) в первую очередь (если не исключительно) просто вызвать другие функции. Затем эти функции выполняют свою работу. Делая это таким образом, вы можете сделать такую ​​функцию, как resetLevel, собирая все меньшие функции, которые применяются, но исключая часть о добавлении звёзд.

+0

Ну, я уже написал много кода, и метод, о котором я думал, - это способ, которым я уверен, будет работать. Я не собираюсь переписывать недельный код только для того, чтобы получить эту эстетическую вещь, когда у меня есть только около недели, чтобы закончить эту маленькую игру и передать ее в качестве задания. Поэтому, пожалуйста, могу ли я получить некоторую помощь в том, какой код мне нужен, чтобы проверить, существует ли хотя бы одна из этих звезд в звездном контейнере (контейнер называется starContainer btw) в самом начале программы, так что я могу сделать это, чтобы затем определить, появляться в звездах или нет. – XirmiX

+0

Несмотря на то, что я все еще не знаю, как сделать чек, который я попросил здесь, я выяснил, как получить то, что мне нужно; просто заставляя звезды всплывать один раз, устанавливая слушателя вне функции запуска игры. Но тем не менее, код для этого был бы хорош для будущих целей, поэтому, если бы кто-нибудь мог предоставить некоторые, это было бы здорово. – XirmiX

+0

Именно это я и говорил. Более или менее –

0

, когда вы сказали Существование, так что контейнер, я назвал этот контейнер, (которые содержат звезды, и звезды были добавлены к нему), как starsRoot, которая абсолютно является DisplayObject (правильно?)

Теперь, чтобы проверить весь из детско в DisplayObject, мы должны сделать это:

for (var i:int=0; i<starsRoot.numChildren; i++) { 
    var child = starsRoot.getChildAt[i]; 
} 

то, как проверить, что этот ребенок действительно звезда !? как вы сказали

есть ли экземпляр/клип звезды

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

определяет Linkage имени для звезд из библиотеки, то будет имя класса и следует начинать с заглавной буквой, например Stars

enter image description here

теперь назад к кода, на этот раз мы можем проверить, является ли ребенок экземпляром Stars

for (var i:int=0; i<starsRoot.numChildren; i++) { 
    var child = starsRoot.getChildAt[i]; 
    if (child is Stars) { 
     // test passed, star exist 
     break; 
    } 
} 
+0

Извините, не то, что я ищу. Насколько я понимаю, вы сосредоточены на проверке того, является ли звезда дочерним элементом этого конкретного контейнера ... Я пытаюсь сделать так, чтобы игра проверяет, существует ли какая-либо звезда внутри этого контейнера. – XirmiX

1

Вот что я сделал, чтобы решить мою проблему ... Вот что я имел в своем распоряжении:

function startGame():void 
{ 
    starsSpawn(); 
    //other code here 
} 

Это то, что я изменил его:

starsSpawn(); 

function startGame():void 
{ 
    //other code here 
} 
Смежные вопросы