2013-09-05 2 views
0

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

Это может показаться естественным, чтобы сделать один класс на уровень, с каждым классом простирающейся AvoiderGame и использовать события для переключения между ними. Итак, у нас могут быть классы с именем AvoiderGameLevelOne, AvoiderGameLevelTwo, и т. Д., И каждый из них сбрасывает «NavigationEvent.NEXT_LEVEL», когда подходит. Предположительно, тогда класс документа прослушал бы это событие , и когда он его услышал, он запустил бы «playScreen = новый AvoiderGameLevelTwo()» (или какой бы уровень не был подходящим) и передать всю информацию, такую ​​как оценка и время к этому новому экземпляру playScreen .

Я не совсем уверен, как это сделать. Я поставил свою сцену, которая представляет собой массив плит в классе под названием level1, level2 и т. Д., И если бы он расширил мой основной класс. Просто чтобы проверить, все ли работает, я добавил публичный static var, называемый levelArray, в моем основном, который является пустым массивом. Затем в level1 я переместил свой массив в levelArray.

Так что для моего level1 класса Кажется

package { 

    public class Level1 extends Main { 

     public var floor1:Array = new Array(); 
     floor1[0] = [2,1,1,1,1,1,2]; 
     floor1[1] = [1,1,1,1,1,1,1]; 
     floor1[2] = [1,1,1,2,1,1,1]; 
     floor1[3] = [1,1,1,1,1,1,1]; 
     floor1[4] = [1,1,1,2,1,1,1]; 
     floor1[5] = [1,1,1,1,1,1,1]; 
     floor1[6] = [2,1,1,1,1,1,2]; 

     public function Level1() { 

      Main.levelArray.push(floor1); 
     } 


    } 

} 

не работает. levelArray выглядит пустым. Может быть, потому, что два класса не общаются друг с другом правильно? Любые идеи, если я приближаюсь к этому правильным способом?

+0

Не имеет значения для вашей проблемы, но я не думаю, что вы хотите, чтобы ваш класс уровня расширялся. Я имею в виду, что «Level1» - это не тип «Main», не так ли? – Cadin

+0

Правда. Я просто подумал, что если это касается Main, возможно, они общаются. Должен ли я просто продлить MovieClip? – Bindlestick

+0

В зависимости от того, насколько сложны классы уровня, вы можете создать базовый класс уровня и расширить его уровни. Уровень может иметь общие методы для связи с объектом уровня. Скорее всего, вы создадите новый уровень в Main и общаетесь с ним таким образом. Класс Level не обязательно должен расширять что-либо (если только он не является на самом деле MovieClip). – Cadin

ответ

2

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

package { 

    public class Level1 extends Main { 

     public var floor1:Array = new Array([2,1,1,1,1,1,2], 
              [1,1,1,1,1,1,1], 
              [1,1,1,2,1,1,1], 
              [1,1,1,1,1,1,1], 
              [1,1,1,2,1,1,1], 
              [1,1,1,1,1,1,1], 
              [2,1,1,1,1,1,2] 
              ); 

     public function Level1() { 
      Main.levelArray = floor1; 
     } 
    } 

} 

EDIT: если единственное отличие о каждом уровне является массив, который формирует пол, вы можете рассмотреть вопрос о том, что вам не нужен новый класс для каждого уровня, только новый массив. вы можете определить массивы для каждого уровня в классе, который равен super, и затем просто заменить их каждой прогрессией.

+0

Это правильный ответ. Вы не можете запускать код вне функций в AS3 на основе классов. Если вы хотите добавить что-то в массив, вам нужно либо сделать это в конструкторе, либо в другой функции, либо сделать это в объявлении массива, как это сделано в приведенном выше ответе. –

+0

Я планирую добавить разных врагов для разных уровней. Спасибо, похоже, что это работает, мне просто нужно выяснить часть расширения класса уровня. – Bindlestick