Итак, я только начинаю писать игру на Java и пишу свои игровые объекты.Теперь я прочитал здесь, в Evolve Your Hierarchy , что вы должны строить свои игры как композиции, а не как иерархию большого класса.Как показывает это изображение из предыдущей ссылки:
Однако, когда я приступаю к реализации, у меня возникает один маленький вопрос о том, где применять интерфейсы.
Допустим, у вас есть класс Player и интерфейсы Moveable и Renderable.Вы реализуете это, используя переменные открытого интерфейса:
class Player {
public Moveable moveable;
public Renderable renderable;
}
class GenericMoveable implements Moveable {
// Function implementations
}
class PlayerRenderable implements Renderable {
// Function implementations
}
Или вы пытаетесь сделать это, применяя интерфейсы непосредственно к объекту:
class Player implements Moveable, Renderable {
private GenericMoveable genericMoveable;
// Non-direct Implementation of Moveable
void someMoveFunc(double x, double y) {
genericMoveable.someMoveFunc(x, y);
}
// Direct implementation of Renderable
void someRenderableFunction() {
// Player class specific code
}
}
class GenericMoveable implements Moveable {
// Function implementations
}
Теперь в настоящее время я чувствую, чтоВторой способ лучше.Основная причина этого заключается в том, что я могу создать следующие списки:
List<Renderable> renderObjects; // use this to draw all of the objects to the screen
List<Moveable> moveObjects; // use this to move all objects at once
Мне просто нужно подтверждение, что я на правильном пути.Я вполне уверен, что при создании игровых объектов по составу для игр на Java вы хотите применить интерфейсы непосредственно к рассматриваемому игровому объекту, а затем использовать частные интерфейсы, если они вам нужны, и прямые реализации этих функций для остальных.Это правильно?И каковы положительные и отрицательные стороны того, что я делаю?
Хотя, пока мы находимся здесь, на что еще мне нужно обращать внимание при реализации Compositional Game Objects в Java?Что я должен делать по-другому?Спасибо за любые ответы заранее, я ценю любую помощь.