Добавлен alexprey,
опубликован
Добрый день!
Сегодня я расскажу вам о первых моих успехах в написании игры. Начал писать я относительно недавно, но за то малое время, что мне досталось, мне удалось набросать неплохую, как мне кажется, архитектуру приложения. В чем её соль? А в том, что портирование на тот же андроид произойдет достаточно быстро, нужно будет лишь написать 3-4 новых класса использую уже плюшки той системы.
Сегодня я расскажу вам о первых моих успехах в написании игры. Начал писать я относительно недавно, но за то малое время, что мне досталось, мне удалось набросать неплохую, как мне кажется, архитектуру приложения. В чем её соль? А в том, что портирование на тот же андроид произойдет достаточно быстро, нужно будет лишь написать 3-4 новых класса использую уже плюшки той системы.
Детальки
Рисунок выше, это небольшая схемка, которую я набросал буквально за пару минут перед тем как писать статью. Всё приложение будет строиться на нескольких пакетах: AbstractEngine\AC, AbstractEngine\System.*, GameLib\GameLogic.*
Суть AbstractEngine, в том, что он полностью написан на абстрактных классах (они лежат в пакете AC - AbstractClass). Некоторая логика можно было так же вынести туда, например цикл отрисовки элементов
Суть 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)
У нас теперь есть абстрактные классы, осталось нам их реализовать, чтобы запустить всё это варево на компе. А реализовать нам надо 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 уже есть своя двойная буферизация. А я хотел сам писать.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован alexprey
И да, если хотел кроссплатформенность такую, нужно было брать libgdx, там чтобы сделать билд на андроид не надо ничего писать, + рендер через опенгл, это все таки не тормозной канвас. Ну или jmonkeyengine можно было взять, правда это уже забивание гвоздей микроскопом, там маловато инструментов для 2д.