День первый: основа

» опубликован
Добрый день!
Сегодня я расскажу вам о первых моих успехах в написании игры. Начал писать я относительно недавно, но за то малое время, что мне досталось, мне удалось набросать неплохую, как мне кажется, архитектуру приложения. В чем её соль? А в том, что портирование на тот же андроид произойдет достаточно быстро, нужно будет лишь написать 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 уже есть своя двойная буферизация. А я хотел сам писать.


Просмотров: 967

» Лучшие комментарии


SageOne #1 - 5 лет назад 3
<3 твои тексты всегда с удовольствием читаю, хз почему :D
alexprey #2 - 5 лет назад (отредактировано ) 1
Пиначет, я тоже не знаю))
ScorpioT1000 #3 - 5 лет назад -1
Отдельное спасибо Doc'у, за то что в своих статьях показал, что в awt уже есть своя двойная буферизация. А я хотел сам писать.
даже страшно подумать, что ты ещё захочешь написать сам ...
Это сообщение удалено
Doc #5 - 5 лет назад 1
Ужасный нейминг :D
И да, если хотел кроссплатформенность такую, нужно было брать libgdx, там чтобы сделать билд на андроид не надо ничего писать, + рендер через опенгл, это все таки не тормозной канвас. Ну или jmonkeyengine можно было взять, правда это уже забивание гвоздей микроскопом, там маловато инструментов для 2д.