Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проектирвание класса персонажа в игре (http://www.flasher.ru/forum/showthread.php?t=197738)

Dalass13 12.04.2013 08:32

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

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

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

Hauts 12.04.2013 08:48

Dalass13, по-моему, вы абсолютно правильно мыслите.

Цитата:

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

Dalass13 12.04.2013 08:55

Да, я понимаю, что путаница небольшая возникает из-за слова "динамический", спасибо за совет.

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

Hauts 12.04.2013 08:56

Dalass13, думаю, что да. Подождите ответов других участников, может подскажут больше :)

Цитата:

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

Dalass13 12.04.2013 09:06

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

Babylon 12.04.2013 10:02

Весь общий функционал наследуйте, то, что не наследуется приходиться расширять т.е. экстендить. Слова английские в языке AS3 не просто так используются :)

caseyryan 12.04.2013 10:37

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

Во втором опциональный параметр, то есть при щелчке мышью можно передать координаты к которым должен двигаться объект, и расстояние, чтобы он не прошел больше этого расстояния. Но это методы можно использовать и при движении с помощью клавиатуры. Например при нажатии W персонаж начинает двигаться в том направлении, в котором развернут на расстояние, равное текущей скорости.
Цитата:

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

Dalass13 12.04.2013 10:38

Цитата:

Сообщение от Babylon (Сообщение 1129417)
Весь общий функционал наследуйте, то, что не наследуется приходиться расширять т.е. экстендить. Слова английские в языке AS3 не просто так используются :)

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

Добавлено через 1 минуту
Цитата:

Сообщение от caseyryan (Сообщение 1129420)
Я думаю что даже слово Game тут не нужно. Просто DynamicObject или MovableObject

На самом деле слово Game чисто для своего удобства. Словом меньше - словом больше, не суть важно ведь

Добавлено через 12 минут
Цитата:

Сообщение от caseyryan (Сообщение 1129420)
Вообще, можно одни и те же функции использовать и для управления мышью, и для управления клавиатурой.
Я бы ввел отдельно функцию setRotation(angle:Number):void и moveTo(toX:Number, toY:Number, distance:Number = -1):void

Насчет этого лишнего функционала я тоже уже высказывался, а то, что предложили Вы больше подойдет для игр с видом сверху или 2D изометрии. У меня же будет чисто 2D задумка ( прямо, как старые битемапы ). Вот, кажется все мысли высказал


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

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