Я новичок в libgdx, и я обнаружил, что меня одолевают самые простые вещи. Кажется, я хочу, чтобы я делал что-то определенным образом, но документация не скажет мне, что это такое.
Я хочу сделать очень простую 2d игру, в которой игрок управляет космическим кораблем. Колесо мыши будет увеличиваться и уменьшаться, а информация и элементы управления отображаются на экране.
Но я не могу заставить колесо мыши НЕ увеличивать пользовательский интерфейс. Я попытался futzing с матрицами проекции между
Вот мой (текущий) код:
public class PlayStage extends Stage {
...
public void draw() {
// tell the camera to update its matrices.
camera.update();
// tell the SpriteBatch to render in the
// coordinate system specified by the camera.
spriteBatch.setProjectionMatrix(camera.combined);
spriteBatch.begin();
aButton.draw(spriteBatch, 1F);
playerShip.draw(spriteBatch, 1F);
spriteBatch.end();
}
}
camera.zoom устанавливается с помощью прокрутки (целое число).
Я пробовал около дюжины вариаций на тему смены матрицы проекции камеры после того, как кнопка нарисована, но до того, как корабль появится, но независимо от того, что я делаю, то же самое происходит и с кнопкой, и с кораблем. Так:
Каков обычный способ libgdx для реализации экранного интерфейса, который не трансформируется матрицей проекции / масштабированием камеры?
camera.project(Vector3 screenCoords)
чтобы проецировать что-то от мировых координат до экранных шнуров.Ответы:
Вы можете просто использовать другой SpriteBatch без установки матрицы проекции, чтобы нарисовать HUD,
источник
Я думаю, что самый простой способ создать карту HUD - использовать вторую камеру и наложить их. Эта проблема обсуждалась на форумах libgdx некоторое время назад, и я помню, как кто-то там публиковал свой код hud. Вы можете покопаться там и посмотреть, что вы придумали.
источник
Вот метод, который я использую для работы с одним пакетом:
Сначала нарисуйте все остальное, затем нарисуйте свой последний HUD:
Если вы хотите рисовать больше после, убедитесь, что вы сбросили матрицу проекции до того, каким она должна быть.
источник
.cpu()
каждый раз создаете новую матрицу). Лучше иметь постоянную буферную матрицу и устанавливать ее значения в каждом кадре.Помните, что на первой камере зафиксирован фон. Второй - это то, куда движется земля. Если вам интересно, почему спрайт движется на сцене, потому что секрет - это земля, которая движется. Спрайт просто гуляет, так как вы используете третью камеру. Вы могли бы прокручивать землю второй камеры, но HUD все еще на месте на третьей. Обещай, это правда! Третья камера - это место, где отображается спрайт в центре для направления, идет ли он влево или вправо с помощью небольшого анимационного кода, и HUD (т. Е. Счет, оставшиеся жизни, использованный элемент). Если тебе что-то нужно, спроси меня.
источник
Я сделал это так:
Сначала я создал новый класс под названием Hud. Реализуется
Disposable
из-за управления ресурсами. Затем вам нужно определитьStage
для вашего контента и новый,viewport
потому что будет использоваться новая камера. Вам нужно определить новый,Table
который вы можете добавить вStage
. Вы можете добавить свой контент,table
как обычно. Остальная часть кода, который я приведу, чтобы показать, как он работает, зависит от конкретной игры, поэтому просто проигнорируйте его.}
а затем в Playscreen, как это:
Прежде всего вам нужна переменная для ссылки на ваш HUD, как:
а затем в конструкторе вы создаете новый экземпляр вашего класса:
в методе обновления вам нужно поместить эти строки кода, так как я думаю, что вы хотите отобразить некоторую информацию об игре, такую как очки или оставшиеся жизни:
в методе рендеринга сделайте это:
и, в конце концов, не забудьте избавиться от лишнего в методе утилизации
Надеюсь, это поможет
источник