Ответы пользователя по тегу Разработка игр
  • Как узнать координаты точек (вершин)?

    Угол а берите положительным, по часовой стрелке. То есть вместо показанного на рисунке угла в -45 градусов берите 360-45. Если заранее известно, что угол задается в пределах (-360; 360), то можно просто брать угол 360+а. Хотя на самом деле важен только нижний предел, да и можно написать приведение величины к этому пределу.

    Координата переда относительно центра такова: (cos a * h/2; sin a * h/2). Для перевода в абсолютные координаты не забывайте к относительным прибавлять координаты центра.

    Координату зада можно считать либо аналогично, взяв угол 180+a, либо взяв координаты, обратные координатам перевода. В абсолютным координатах, соответственно, достаточно из координат центра вычесть координаты переда, так как перед и зад симметричны относительно центра.

    Так как работать необходимо с линией, проходящей через центр вдоль объекта, ширина и координаты углов в решении не нужны. h/2 — расстояние от центра до одной из искомых точек.
    Ответ написан
    3 комментария
  • Как называется архиректура такой игры?

    По-моему, решение «в лоб» очевидно. Автора вопроса напрягают запросы от клиента, но, кажется, он неверно трактует их суть. Клиент не должен говорить серверу, что «постройка здания закончилась, запиши это». Он может сообщить о начале постройки и спросить: «а не завершилась ли постройка?». Завершается постройка без участия клиента.

    На сервере хранятся как общие данные о игровом мире (параметры игроков, их здания, объекты, юниты, прирост ресурсов и т.д.), так и очередь событий. Большая часть добавлений событий в очередь инициируется запросом от игрока: построить/проапгрейдить здание, тренировать юнита, отправить войска и прочее. Это те действия, которые должен совершать игрок, будучи онлайн. Возможно, какие-то события будут инициироваться и сервером.

    Событие в очереди представляет собой некое описание события, а также метку времени, по которой событие должно произойти (например, здание строится 2 часа, значит в качестве метки будет записано время на два часа позже отправки запроса на постройку).

    В бесконечном цикле сервер делает следующее: выбирает все события, время завершения которых уже наступило, и обрабатывает их: изменяет уровни/координаты объектов, пересчитывает характеристики, изменяет флаги, удаляет событие из очереди.

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

    То все все делается на сервере. Клиент может только: получить доступную ему информацию на текущий момент, получить информацию о времени завершения всех событий, относящихся к нему, послать запрос на добавление какого-либо события в очередь.
    Ответ написан
    3 комментария