Организация класса: функция внутренняя или внешняя - PullRequest
1 голос
/ 15 июля 2011

Я создаю игру с боковой прокруткой во Flash (as3) и стараюсь поддерживать порядок и чистоту.

Я создал класс «Уровень», который получает все данные об уровне, данные об игроке и создает все объекты ландшафта и объект игрока. Его начало становиться грязным, потому что я выполняю все функции для проверки столкновений игроков и перемещения игроков, перемещения по местности, запуска и остановки звука, врагов и многого другого - в этом классе. Это нормально? Или есть лучший способ организовать вещи так, чтобы они были отдельными, но все же позволяли им взаимодействовать друг с другом.

У меня есть класс игрока, класс местности, класс врага и т. Д., Но внутри них мало что происходит.

спасибо /

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

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

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

Для звуков вы можете рассмотреть одноэлементный класс, такой как SoundManager, который содержит все ваши звуки в массиве или словаре, а затем другие классы воспроизводят звуки с помощью функции, подобной playSound(soundName:String):void в SoundManager.

Надеюсь, это даст вам старт.Не стесняйтесь спрашивать, если вам нужно больше деталей.Это также может помочь, если вы разместите часть своего кода.Удачи с этим!

1 голос
/ 15 июля 2011

Не вдаваясь слишком подробно в принципы объектно-ориентированного проектирования, я бы посоветовал себе «Что принадлежит классу с именем X».

Так, например, это звучит как Level класс должен следить за игроками, врагами и местностью на этом ... хорошо, уровне (возможно, карта или сцена могли бы быть лучшим именем?).Но это не должно делать всю работу для этих объектов;многие функции, которые выполняют работу по перемещению, столкновениям, звуку и т. д., можно перенести в другие классы.Тогда Level становится оркестратором;вроде как дирижер, ведущий музыку (но не играющий на скрипках, рожках и т. д.).

Кроме того, похоже, что у игроков, местности и врагов много общего.Например, все они нуждаются в обработке движения и столкновений.Вы можете создать родительский класс (скажем, GameObject), и классы Player, Terrain и Enemy будут расширены.Этот тип полиморфизма может быть очень полезен для обеспечения общей функциональности.

...