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

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

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

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
По умолчанию Проектирвание класса персонажа в игре

Доброго времени суток всем.
Понимаю, что всех уже достали подобные вопросы, но я лучше спрошу 1 раз и больше у меня проблем не возникнет, чем накидаю невнятный код и пойму, что решение неверное, потрачу время и, в итоге, все равно задам вопрос. Небольшое вступление закончено. Итак, к проблеме.

Написана модель движения аля Diablo | Sacred | Torchlight (управление мышью, Shift останавливает персонажа и т.п. ), то бишь используются функции типа "moveTo", "moveStart", "moveStop", которые принимают произвольные для персонажа координаты. Все бы ничего, и создал бы я класс Character и добавил бы в него все эти функции, НО другие объекты так же двигаются (снаряды, стрелы, противники). Итого, получаем функции, нужные всем дин. объектам. Итак, вопрос: как лучше спроектировать классы? Пока я вижу одно решение - выделить общий класс всех "движущихся" объектов игры, например GameDynamicObjects и класс Character будет дочерним от него.

Если бы управление было стрелочно-WASD'шным, то я без тени сомнения добавил бы это все в класс Character И не парился, но я парюсь по вышеизложенным причинам, поэтому прошу помощи более опытных людей в этом плане. Спасибо за внимание

Старый 12.04.2013, 08:48
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Dalass13, по-моему, вы абсолютно правильно мыслите.

Цитата:
выделить общий класс всех "движущихся" объектов игры, например GameDynamicObjects и класс Character будет дочерним от него.
Только я бы этот класс назвал немного по-другому, например "DynamicGameObject" (extends BaseGameObject).
__________________
hauts.ru

Старый 12.04.2013, 08:55
Dalass13 вне форума Посмотреть профиль Отправить личное сообщение для Dalass13 Найти все сообщения от Dalass13
  № 3  
Ответить с цитированием
Dalass13
 
Аватар для Dalass13

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
Да, я понимаю, что путаница небольшая возникает из-за слова "динамический", спасибо за совет.

Получается, я на правильном пути?

Старый 12.04.2013, 08:56
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Dalass13, думаю, что да. Подождите ответов других участников, может подскажут больше

Цитата:
Если бы управление было стрелочно-WASD'шным, то я без тени сомнения добавил бы это все в класс Character И не парился
Еще вот подумал, — помимо методов "moveTo", "moveStart" и "moveStop" можно добавить "moveBy", который будет смещать игровой объект на некоторые значения. Тогда структура классов сохранится, а управление wasd просто будет "дергать" смещение. Надеюсь понятно объяснил
__________________
hauts.ru

Старый 12.04.2013, 09:06
Dalass13 вне форума Посмотреть профиль Отправить личное сообщение для Dalass13 Найти все сообщения от Dalass13
  № 5  
Ответить с цитированием
Dalass13
 
Аватар для Dalass13

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
Да, была такая мысль, но старое доброе дьябловское управление изменять не хочу. А такие WASD'шные "подергивания" и "отклонения от траектории" могут понадобиться, например, для уворота от стрел, когда маршрут уже указан. Одна проблема - при удерживании мыши персонаж двигается за мышью непрерывно и управление в этот момент WASD может просто напросто запутывать игрока в отношении его движения. Палка с двумя концами, как говорится) Юзабилити с одной стороны падает,а с другой стороны, кто - то посчитает это очень нужной фичей. Но это тоже, если я правильно понял

Старый 12.04.2013, 10:02
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 6  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Весь общий функционал наследуйте, то, что не наследуется приходиться расширять т.е. экстендить. Слова английские в языке AS3 не просто так используются

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Вообще, можно одни и те же функции использовать и для управления мышью, и для управления клавиатурой.
Я бы ввел отдельно функцию setRotation(angle:Number):void и moveTo(toX:Number, toY:Number, distance:Number = -1):void

Во втором опциональный параметр, то есть при щелчке мышью можно передать координаты к которым должен двигаться объект, и расстояние, чтобы он не прошел больше этого расстояния. Но это методы можно использовать и при движении с помощью клавиатуры. Например при нажатии W персонаж начинает двигаться в том направлении, в котором развернут на расстояние, равное текущей скорости.
Цитата:
Только я бы этот класс назвал немного по-другому, например "DynamicGameObject" (extends BaseGameObject).
Я думаю что даже слово Game тут не нужно. Просто DynamicObject или MovableObject

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

Регистрация: Oct 2010
Адрес: Свердловск
Сообщений: 77
Цитата:
Сообщение от Babylon Посмотреть сообщение
Весь общий функционал наследуйте, то, что не наследуется приходиться расширять т.е. экстендить. Слова английские в языке AS3 не просто так используются
Это абсолютно естественно, я понимаю принципы ООП, но есть некоторые исключения все-таки. Хотя бы потому, что пишу игру без формализованного проекта и может что - то поменяться "на ходу". Сложно проектировать все одному. Исходя из этого и пытаюсь сделать более "гибкую" к будущим незапланированным изменениям структуру.

Добавлено через 1 минуту
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Я думаю что даже слово Game тут не нужно. Просто DynamicObject или MovableObject
На самом деле слово Game чисто для своего удобства. Словом меньше - словом больше, не суть важно ведь

Добавлено через 12 минут
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Вообще, можно одни и те же функции использовать и для управления мышью, и для управления клавиатурой.
Я бы ввел отдельно функцию setRotation(angle:Number):void и moveTo(toX:Number, toY:Number, distance:Number = -1):void
Насчет этого лишнего функционала я тоже уже высказывался, а то, что предложили Вы больше подойдет для игр с видом сверху или 2D изометрии. У меня же будет чисто 2D задумка ( прямо, как старые битемапы ). Вот, кажется все мысли высказал


Последний раз редактировалось Dalass13; 12.04.2013 в 10:51.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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