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

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

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

Регистрация: Oct 2012
Сообщений: 12
Question Как сделать игровой интерфейс?

Собственно, вопрос - как сделать игровой интерфейс? Как вы его делали/делаете?

Мы разрабатывает браузерную игру для социальных сетей. Там будет приличное количество различных элементов управления.

И так, художник предлагает следующий вариант - он делает весь интерфейс во Flash CS, в основном на основе MovieClip, а я уже подключаю его в проекте на FlashDevelop и обращаюсь к нужным элементам управления по именам, задавая им значения. Но мне нужны будут не только простые элементы управления, типа Button или Label, а ещё RadioButton, ToggleButton, ListBox, различные игровые элементы (предметы, информация о персонажах).

Проблема в том, что управлять всем этим в коде будет весьма затруднительным. Нужно будет писать дополнительный код, либо обёртки под MovieClip'ы, точно не знаю, как.

Выглядеть это будет примерно так:
Код AS3:
panel.user_level.text = "3";
panel.user_avatar.addChild(...); // Чтобы добавить аватарку, нужно написать отдельный код для загрузки, после удалить прошлую аватарку и добавить загруженную.
Мой же вариант основан только на коде. Все сложные элементы управления представлены собственными классами, которые скрывают определённые манипуляции вывода/загрузки данных. Графика внутри них рисуется с помощью текстур (BitmapData).

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

Выглядеть это будет примерно так:
Код AS3:
var playerIcon:PlayerIcon = new PlayerIcon(this, 10, 10);
 
playerIcon.level = 3;
playerIcon.avatar = "http://ololo.png"; // Мне остаётся лишь задать ссылку. Внутри будут произведены действия для загрузки изображения на основе ещё одного дополнительного компонента.
 
var toggleButton:ToggleButton = new ToggleButton(this, 100, 50);
 
toggleButton.selected = true;
toggleButton.label.text = "Включен";
toggleButton.label.setFont("Tahoma", 12, 0xFFFFFF);
toggleButton.texture = Resources.TOGGLE_BUTTON_TEXTURE;
Надеюсь, я смог донести до вас свою проблему и вы поможете мне определится.

Старый 07.10.2012, 20:32
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 2  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Ваш вариант вполне себе ничего. И это не проблема, что
Цитата:
что художнику придётся отдельно рисовать все элементы управления
ему и так придется рисовать их по отдельности)
Или Вы имели ввиду под проблемой именно это:
Цитата:
мне уже потом придётся их расставлять в коде
? На самом деле, это совсем не проблема.

Старый 07.10.2012, 22:04
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Есть 2 конкурирующих подхода:
- рисовка целых интерфейсов вместе с кнопками во Flash IDE
- скинование компонентов нарисованным художниками и расстановка кодом

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

Т.е. используйте первый подход - не ошибётесь


Последний раз редактировалось expl; 07.10.2012 в 22:15.
Старый 07.10.2012, 22:54
olexandr вне форума Посмотреть профиль Отправить личное сообщение для olexandr Посетить домашнюю страницу olexandr Найти все сообщения от olexandr
  № 4  
Ответить с цитированием
olexandr
 
Аватар для olexandr

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
Я предпочитаю второй подход, но иногда дают уже готовую графику и тогда приходится совмещать оба подхода. Ведь совсем необязательно, чтобы ваш PlayerIcon наследовался от DisplayObject. Вполне можно, в конструктор передавать мувиклип-графику , а дальше работать с этим классом по второму подходу.

Код AS3:
var playerIcon:PlayerIcon = new PlayerIcon(panel.user_avatar, this, 10, 10);
 
playerIcon.level = 3;
playerIcon.avatar = "http://ololo.png";
__________________
сайт, vk

Старый 08.10.2012, 00:32
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 5  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
делаю просто. например, какое-нибудь окно, скажем, окно магазина.
в Flash CS собираю по частям всё окошко, прописывая каждому элементу своё имя.
в коде - отдельный класс для этого окна с параметрами - элементами из окна.
Код AS3:
var closeBtn:SimpleButton = layout.getChildByName('closeBtn') as SimpleButton;
и т.д.
для каких-либо элементов, которые нужно изменять параметрами извне - геттеры сеттеры. ничего сложного.

Старый 08.10.2012, 07:59
Virtual Toy вне форума Посмотреть профиль Отправить личное сообщение для Virtual Toy Найти все сообщения от Virtual Toy
  № 6  
Ответить с цитированием
Virtual Toy
 
Аватар для Virtual Toy

Регистрация: May 2004
Адрес: Малайзия
Сообщений: 20
Вообще, интерфейсы - это непростая штука, правильное решение должно включать как минимум: простую возможность локализации (с самого начала), контейнеры (понадобится, уверен на 100%), лэйауты (как, скажем, будете позиционировать кнопку относительно левого нижнего края экрана? каждый раз ручками?), скинование/стилизация (минимальная поддержка CSS спасет много времени). Удобен декларативный подход к созданию интерфейсов. Использую, например, что-то вроде mxml:
Код:
<cntn:Canvas factoryid="hdb.scenes.splash::SplashView" autoSize="false" width='@StaticRef(class="hdb.utils.MultiScreenSupport",member="screenWidth")' height='@StaticRef(class="hdb.utils.MultiScreenSupport",member="screenHeight")'>
	<ctrl:Image contentScaleMode="zoom" source="@ClassRef(hdb.assets.SplashScreenView)" percentWidth="100" percentHeight="100" />
	<cntn:HBox right="15" bottom="15" vAlign="bottom">
		<ctrl:SkinnedButton id="showScoresButton" icon="@ClassRef(hdb.assets.ScoresButtonIcon)" styleName="xLargeIconButton" />
		<ctrl:SkinnedButton id="achievementsButton" icon="@ClassRef(hdb.assets.AchievementsButtonIcon)" styleName="xLargeIconButton" />
		<ctrl:SkinnedButton id="optionsButton" icon="@ClassRef(hdb.assets.OptionsButtonIcon)" styleName="xLargeIconButton" />
		<ctrl:SkinnedButton id="playButton" icon="@ClassRef(hdb.assets.PlayButtonIcon)" styleName="xxxLargeIconButton" />
	</cntn:HBox>
	<ctrl:SkinnedButton id="@notificationButton" visible="false" left="15" bottom="15" icon="@ClassRef(hdb.assets.NotificationButtonIcon)" styleName="xLargeIconButton" />
	<ctrl:Label id="versionLabel" top="10" left="10" styleName="versionText" />
</cntn:Canvas>
Это не так сложно, как может показаться на первый взгляд. Есть куча готовых библиотек, вроде madcomponents, aswing, alternativagui, minimalcomps. Еще можно их попробовать скрестить с mxml (удобно, хотя есть подводные камни):
http://www.ryancampbell.com/2009/08/...le-and-source/
Попробуйте, лучше день потерять, потом за пять минут долететь (и не один раз, кстати).

Старый 08.10.2012, 09:39
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Предпочитаю первый подход. Расставлять всё программно... Нет уж, спасибо.

Цитата:
Мой же вариант основан только на коде. Все сложные элементы управления представлены собственными классами, которые скрывают определённые манипуляции вывода/загрузки данных. Графика внутри них рисуется с помощью текстур (BitmapData).

Проблема в том, что художнику придётся отдельно рисовать все элементы управления, а мне уже потом придётся их расставлять в коде, то есть, задавать нужное положение, нужный шрифт и тому подобное. Если художник вдруг захочет так, чтобы кнопка была чуть левее, то нужно будет лезть в код, хотя, мне несложно.
А зачем отдельно? Пусть художник позиционирует как ему надо, а вы уже по своим классам распихивайте инстансы.

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Тут еще иногда играет роль такой момент, как тормознутость художника (полагаю, следует думать, что из-за загруженности, хотя уверен, что это далеко не всегда так). Бывает, приспичет какой-нибудь элемент интерфейса подвинуть, пишешь художнику, мол, подвинь, пожалуйста, и ждешь непонятно зачем, когда мог бы и сам подвинуть ровно на столько, на сколько нужно.

Старый 08.10.2012, 11:01
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Я оба подхода использую, так как получаею псд и все оттуда режу на куски и собираю обратно. Некоторые вещи собираю во флеше и проставляю имена, некоторые кодом. Зависит от интерактивности и смотря что надо анимировать.

И как вежливо сказал Silicium, художники - творческие натуры, поэтому постоянно тормозят, так как ветер на горе Фудзияма подул в другую сторону. То лучше, чтобы от них зависело все по минимуму.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 08.10.2012, 11:21
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 10  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от Silicium Посмотреть сообщение
Тут еще иногда играет роль такой момент, как тормознутость художника (полагаю, следует думать, что из-за загруженности, хотя уверен, что это далеко не всегда так). Бывает, приспичет какой-нибудь элемент интерфейса подвинуть, пишешь художнику, мол, подвинь, пожалуйста, и ждешь непонятно зачем, когда мог бы и сам подвинуть ровно на столько, на сколько нужно.
Открой флашку, да поправь. Никаких проблем. Гораздо проще чем подгонять в коде и компилить по десять раз, чтобы посмотреть как оно там пододвинулось.

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

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

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


 


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


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