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

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

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

Регистрация: Jul 2009
Сообщений: 19
Tip Архитектура флэш игры

Здравствуйте уважаемые флэш разработчики.

Ради опыта взялся программировать не сложную игру подобного полана: http://content.stungames.com/games/o...ransporter.swf (тюнинг машины). Т.е. в наличии интерфейс с кнопками, нажимая на них мы меняем деталь машины (тюнингуем).
Хотел бы обсудить с опытными людьми, как лучше организовать архитектуру игры.
Итак.
Машина делиться на корпус ( 5 видов покрасок), колеса (с 5-ю видами дисков), сполеры ( 5 видов), и др.
Организация клипов: к примеру, за корпус у меня отвечает один клип с названием “Corpus” с пятью кадрами (в каждом - один вид покраски). Очень удобно перебирая кадры менять покраску. Таким же образом у меня организованы остальные части машины.
Далее у меня существует клип Car, который сформирован из клипов (экземпляров) частей машины, иными словами, там собрана машина на основе клипов (“Corpus” и пр.) и т.к., все поименовано, чтобы к ним можно было обращаться, напр.: Car.Corpus. gotoAndStop(3); - выбираем третьею покраску корпуса
Далее имеется клип Interface, в котором находится графический интерфейс с кнопками – треугольниками, как в игре примере (нажимая на одну из кнопок, она перебирает к примеру, цвета корпуса).
Итак, в кадре у меня расположен экземпляр клипа Interface и экземпляр клипа Car.
В main классе (тот что цепляется в свойствах документа) у меня идет инициализация объектов, а также главный код игры, т.е. переключение между главными кадрами (загрузка- кадр, главное меню -2 кадр, выше описанный тюнинг машины -3 кадр, поездка на машине – 4 кадр, окно результатов – 5 кадр). Тут же прописываю код взаимодействия клипа Interface и Car.
Но вот тут возникала проблема, если экземпляр клипа Interface расположен в третьем кадре, то в функции main() класса main, я не могу обратиться к свойству например Interface_1.x = 10, выдает: “Не удается вызвать свойство или метод со ссылкой на объект "null".”
Если же я экземпляр клипа Interface располагаю в первом кадре, то ошибки нет, обращение к свойству X происходит успешно. Что мне надо сделать, чтобы я мог обратиться к Interface во всех кадрах? Да, и очень важно, экземпляр клипа Interface я не создаю в коде класса main (var Interface_1:Interface = new Interface), а в flash cs4 я перетаскиваю клип в рабочую область кадра 3 и именую в свойствах, как Interface_1.

Т.е. хотел бы услышать мнение об общей организации архитектуры игры и соответственно, как решить вышеописанную проблему?


Последний раз редактировалось Рен; 05.08.2009 в 23:33.
Старый 05.08.2009, 16:04
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
А зачем вам обращаться к этому мувику в первом кадре, если его там нет?

По организации - для такой небольшой игрушки ваш вариант приемлем, а в похожей задаче посложнее уже просто напрашивается использовать иерархию классов. Т.е. есть объект машина, который служит контейнером для всех частей, из которых машина состоит. Для каждой части своё семейство классов, либо наследующихся от какого-то базового, либо просто реализующих одинаковый интерфейс.
Но повторюсь, если нужно просто менять графику - незачем так заморачиваться. А вот если есть например самолётик, на который можно навешивать разные корпуса, которые отличаются внешним видом, разное оружие, которое по-разному стреляет, разные движки со своими характеристиками, то тогда такой подход очень даже пригодится.

Код AS3:
var ship1:Ship = new Ship(new SimpleHull(), new LaserTurret(), new IonEngine());
var ship2:Ship = new Ship(new TankHull(), new SuperMegaWeapon(), new PhotonEngine());
__________________
тонкий тролль, осеянный благодатью

Старый 09.08.2009, 15:23
Рен вне форума Посмотреть профиль Отправить личное сообщение для Рен Найти все сообщения от Рен
  № 3  
Ответить с цитированием
Рен

Регистрация: Jul 2009
Сообщений: 19
А зачем вам обращаться к этому мувику в первом кадре, если его там нет? - просто для теста. Спасибо, разобрался.

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

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

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


 


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


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