Добавлен , опубликован
Добрый день!
Сегодня я расскажу вам о первых моих успехах в написании игры. Начал писать я относительно недавно, но за то малое время, что мне досталось, мне удалось набросать неплохую, как мне кажется, архитектуру приложения. В чем её соль? А в том, что портирование на тот же андроид произойдет достаточно быстро, нужно будет лишь написать 3-4 новых класса использую уже плюшки той системы.

Детальки

Рисунок выше, это небольшая схемка, которую я набросал буквально за пару минут перед тем как писать статью. Всё приложение будет строиться на нескольких пакетах: AbstractEngine\AC, AbstractEngine\System.*, GameLib\GameLogic.*
Суть AbstractEngine, в том, что он полностью написан на абстрактных классах (они лежат в пакете AC - AbstractClass). Некоторая логика можно было так же вынести туда, например цикл отрисовки элементов
IDrawSurface surface = this.doPreRender();
surface.clear();

for (IDrawable obj : drawableObjList)
      obj.draw(surface, timeOnFrame);

this.doPostRender();
То же самое дело обстоит и с циклом обработки ввода, разве что там, чуточку похитрее.
У нас теперь есть абстрактные классы, осталось нам их реализовать, чтобы запустить всё это варево на компе. А реализовать нам надо 3 класса: RenderCore, IDrawSurface, TouchController. Как видите все очень просто. Премудростей возникнуть вроде не должно. Для примера я так же накатал класс кнопки UIButton, которая меняет свое состояние при нажатии (для этого надо было реализовать 2 интерфейса IDrawable и ITouachable)
Вот так вот выглядит главный класс JAVA приложения:
class MainWindow extends JFrame {
	AWT_RenderCore renderCore;
	AWT_MouseListener touchController;
	
	UIButton btn;
	
	public MainWindow()
	{
		super("Main window");
		this.setLayout(new BorderLayout());
		this.setSize(500, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		renderCore = new AWT_RenderCore(this, true);
		renderCore.addObject(new Test());
		renderCore.addObject(btn = new UIButton(20, 90, 75, 22, "Press me!"));
		
		touchController = new AWT_MouseListener();
		touchController.addObject(btn);
		
		renderCore.getCanvas().addMouseListener(touchController);
	}
}
Запускаем его и получаем такое вот прелестное окошко =3

В заключении

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

Отдельное спасибо Doc'у, за то что в своих статьях показал, что в awt уже есть своя двойная буферизация. А я хотел сам писать.
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
27
11 лет назад
3
<3 твои тексты всегда с удовольствием читаю, хз почему :D
1
29
11 лет назад
Отредактирован alexprey
1
Пиначет, я тоже не знаю))
1
37
11 лет назад
1
Отдельное спасибо Doc'у, за то что в своих статьях показал, что в awt уже есть своя двойная буферизация. А я хотел сам писать.
даже страшно подумать, что ты ещё захочешь написать сам ...
Этот комментарий удален
1
29
11 лет назад
1
Ужасный нейминг :D
И да, если хотел кроссплатформенность такую, нужно было брать libgdx, там чтобы сделать билд на андроид не надо ничего писать, + рендер через опенгл, это все таки не тормозной канвас. Ну или jmonkeyengine можно было взять, правда это уже забивание гвоздей микроскопом, там маловато инструментов для 2д.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.