Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.03.2010, 20:14
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 1  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
По умолчанию Как реализовать уровни в платформере на AS3

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

Можно по кадрам в основной сцене сделать 1)прелоадер2)меню 3-10)уровни11)gameover
к примеру, можно создать отдельный мувик LEVELS и в нем по кадрам уровни переключать..
А как сделать лучше?

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

Ошибка в классе персонажа Player.as:
i = (root as MovieClip).boxes.length;

Где мы получаем количество блоков в массиве (сам массив boxes определен в основном классе документа, который как я понимаю экспортируется AS в первый кард).

Почему вылазает ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
Судя по ошибке массив boxes не существует.

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


Последний раз редактировалось dedalx; 26.03.2010 в 20:16.
Старый 27.03.2010, 10:03
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 2  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
dedalx, судя по вопросам, Вы мигрируете с AS2?

В AS3 про кадры на основной сцене забудьте. Они используются только для анимации библиотечных мувиклипов.

Логика построения игры на AS3 такая:
1. пишете "контроллер", который в соответствии с описанием формирует уровень (ставит бэкграунд, вытаскивает объекты на сцену)
2. Для каждого объекта, который что-то делает, пишете свой класс, определяющий его поведение (несколько объектов могут иметь и один класс)
3. Поверх всего этого хозяйства вешаете интерфейс с кнопками, аватарками и всякого рода индикаторами
4. Организуете взаимодействие между всем этим зоопарком через обмен событиями. В простейшем случае контроллер игры слушает все объекты (включая управляющие кнопки того же меню) и при поступлении от них событий отрабатывает их в соответствии с игровой логикой - закрывает, открывает, запускает анимацию и т.д.

Старый 27.03.2010, 14:28
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 3  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
Да про классы понятно, это все есть.
У меня сам уровень составляется не программно, а визуально в Flash CS4 - рассталяются мобы, итемы, блоки и главгерой. Руками на сцене.

Все что вы сказали понятно и почти все уже реализовано. Вопрос именно по реализации стуктуры уровней при ручном их построении. Как программно делать мне понятно, но мне обязательно нужно чтобы они рисовались в ручную. Вопрос в чем их хранить лучше (уровни). В одном мувиклипе с кучей кадров-уровней? А как тогда к примеру сбросить уровень в то состоянии в каком он был при начале игры (вернуть все предметы на свои места) при ручном построении?

Старый 27.03.2010, 17:07
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Не надо ничего собирать руками на сцене. ))
Собирайте, если хотите, конечно, но потом оборачивайте мувиклипом и кладите в библиотеку, а со сцены удаляйте. Понадобился уровень - достали из библиотеки его мувик, не нужен - удалили мувик.

Старый 27.03.2010, 17:31
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 5  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
Так в этом и вопрос) как лучше это делать.
Если назвать мувиклипы уровней Level1, Level2, Level3 в библиотеке как можно потом их вытащить по индексу? Что-то вроде {"Level"+i}, при создании экземпляра класса, как в имя класса подставить индекс? Типа var LVL:Level+i = new Level +i;

Есть такое в AS3? Нет наверно(

Добавлено через 34 минуты
Попробывал сунуть весь уровень в мувиклип. Раньше в классе монстра была проверка есть ли под ним блок:
mobboxdata=stage.getObjectsUnderPoint(p);

Теперь вместо stage надо сунуть как я понимаю мувиклип уровня, так как со stage не работает, ведь сам уровень теперь тоже под точкой.
Попробывал вручную повесить мувиклип уровня на stage и назвать его level (instancename).

mobboxdata=level.getObjectsUnderPoint(p);

Получаю ошибку, что level - такого нет. Почему?

Попробывал добавить на сцену уровень программно, создав экземпляр его класса.
Обращаюсь к экземпляру и получаю туже ошибку

mobboxdata=mylevel.getObjectsUnderPoint(p);

Что mylevel нет такого ) Почему?

Старый 27.03.2010, 18:14
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 6  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
все в порядке ))
это там есть

Присваиваете им классы Level01, Level02, ... и потом вытаскиваете по их именам.

Код AS3:
var ClassReference:Class = getDefinitionByName("Level01") as Class;
var instance:Object = new ClassReference();


Последний раз редактировалось mikhailk; 27.03.2010 в 18:19.
Старый 27.03.2010, 18:22
dedalx вне форума Посмотреть профиль Отправить личное сообщение для dedalx Найти все сообщения от dedalx
  № 7  
Ответить с цитированием
dedalx

Регистрация: Mar 2010
Сообщений: 25
а потом
instance.getObjectsUnderPoint(p) даст мне объекты какие под моей точкой внутри этого уровня instance ?

Старый 27.03.2010, 23:30
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
dedalx,
поверьте тем, кто уже набил все эти шишки. Если к AS3 подходить с позиций AS2 и искать в нем аналоги, а потом притягивать за уши то, чему аналогов нет, то это будет очень большая головная боль. AS3 реально такому подходу сопротивляется.

Цитата:
instance.getObjectsUnderPoint(p) даст мне объекты какие под моей точкой внутри этого уровня instance ?
Да, даст.
Но этот вариант тоже, имхо, не лучший. Метод выдаст все объекты под точкой, потом все равно надо будет разбираться, кто там кто.

Мне кажется, если Вы точно сформулируете, какую именно задачу решаете, и спросите, как это правильно реализовать на AS3, Вам тут быстрее помогут.

Старый 17.05.2012, 15:32
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 9  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Нашел вот через поиск эту тему, а в голове каша все равно =)
В общим задался похожим вопросом, помогите найти правильный/лучший вариант решения.

Как лучше реализовать уровни и переходы между ними соответственно. Уровень состоит из мувиков объектов расставленных в нем вручную с присвоенными именами.
1)Каждый уровень - мувик в библиотеке с классом Lvl1,Lvl2,Lvl3.. (addChild/removeChild). В соответствующем классе Lvl1, содержащиеся в нем объекты, добавляются в массивы для удобства обращения.
Проблема - напрягает 20 мувиков и 20 классов им соответствующих.
2) В библиотеке 20 клипов наследуемых от одного класса Level, в котором нужные объекты соответствующего уровня/клипа распихиваются по массивам. Но можно ли наследовать клипы от класса, без описания двадцати классов каждого? И собственно как перебрать все объекты внутри уровня даже зная имена, но не зная их кол-ва?
3)Класс Level, который на основе массива координат объектов, создает уровень из клипов объектов. Единственная проблема, что все равно придется расставить объекты каждого уровня, а потом вручную забивать координаты в массив. Ну или писать какой/никакой редактор уровней, сохраняющий координаты после расстановки. Но в этом случае будет всего 1 класс + массив, а не 20.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.