2009-12-30 2 views
3

Я делаю симы, как игра, и сейчас я пытаюсь выяснить, как я буду структурировать объекты.Как правильно создавать объекты игры

Прямо сейчас я имею в виду, чтобы создать класс под названием GameObject, то псевдо ниже

public class GameObject { 
     name:String 
     width:int 
     height:int 
} 

Таким образом, я мог бы создать такие объекты, как кусты, деревья и здания. Но потом я начал думать. что, если бы я хотел создать несколько зданий и деревьев того же типа? Мне пришлось бы делать экземпляры GameObject и давать ему новое имя, высоту и ширину. Свойства должны быть одинаковыми для того, чтобы я мог дублировать один объект. Это кажется немного утомительным. Тогда я думаю, может быть, это не правильный путь. Так я думал, я бы продлить GameObject, как показано ниже

public class Tree extends GameObject{ 
     birdHouse:Boolean 
} 

public class Building extends GameObject{ 
     packingGarage:Boolean 
     stories:Number 
} 

public class House extends GameObject{ 
     garage:Boolean 
     stories:Number 
} 

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

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

public class GameObject implement IGameObject { 
      name:String 
      width:int 
      height:int 
    } 

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

Selector.loadObject(gObject:IGameObject); 

В зависимости от того, какого типа это (то есть дерево, здание, дом), я могу использовать случай заявление, чтобы выяснить, какой тип оно и оценить его соответствующим образом.

Я также создал класс плитки, который пройдет через метод loadObject. Он также будет дочерним элементом класса GameOject. если аргумент case обнаруживает, что это тип Tile, он будет выделять любую Плитку в зависимости от того, какая моя мышь закончилась.

Мой второй вопрос заключается в том, что класс наследует класс, реализующий интерфейс, это класс-класс класса, который также считается объектом IGameObject. или он должен реализовать этот интерфейс напрямую.

все это звучит, как будто я иду в правильном направлении, насколько это касается организации.

Спасибо за вашу помощь, спасибо, ребята!

ответ

1

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

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

У вас должны быть отдельные классы, если они имеют другое поведение. Если они имеют одно и то же поведение, но разные свойства, то вы используете один и тот же класс и соответствующим образом устанавливаете свойства.

В этом случае у вас, похоже, не наблюдается существенно различного поведения, но если разделение его на Tree, Building и House облегчит вам жизнь, когда вы сможете управлять тем, какие элементы могут быть включены в другие и т. Д., Сделайте это.

2

Вы должны смотреть в Flyweight узор

Из википедии:

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

Что касается вашего второго вопроса, то да. Можно сказать, что все подклассы класса реализуют все интерфейсы, которые реализует родительский класс.

3

Одна вещь, о которой вы могли подумать, это использование композиции объектов над наследованием. Этот вид согласуется с ответом на мухи. Вместо того, чтобы все ваши объекты GameObject наследовали свойства GameObject; вместо этого у каждого игрового объекта есть только ссылка или указатель на объект или интерфейс, который обладает необходимыми ему свойствами. Например, все ваши игровые объекты, вероятно, имеют своеобразное свойство «размер», а не наследуют это от базового класса, просто привязывайте каждую ссылку на объект игры или указывайте на класс «Размер», чтобы потенциальный объект размера мог быть разделен среди подобных объектов.

Смежные вопросы