Я только начал создавать игру с помощью libgdx. Это верхний вниз стрелок 2d, используя scene2d ui. Теперь я подумал, что могу добавить темноту и свет на некоторые уровни, но я не хочу переписывать все, используя box2d. Мне не нужны реалистичные тени, просто какой-то окружающий свет и светлый круг вокруг моего персонажа, на который не воздействуют стены и другие препятствия, окружающие его. Так что я хотел знать, есть ли какая-либо система освещения в libgdx? Или я могу использовать box2dlights без использования body2d body/world ...? СпасибоLibgdx light without box2d
ответ
К сожалению, ничего подобного уже предоставлено LibGDX.
Но вы можете легко сделать это сами, если не хотите теней.
Here - это видеоролик о том, кто сделал это через LibGDX. Here - статья к этому видео, с кодом и описаниями и всем, что предусмотрено. Вы можете сделать это с шейдерами, но вы также можете сделать то же самое, просто отринув lightmap для FBO (в данных ссылках вы можете увидеть, как это сделать), а затем просто визуализируйте его обычным способом с включенным смешением верхней части экрана. Стандарт SpriteBatch
может это сделать, и вам не нужны никакие пользовательские шейдеры.
Если вы все еще хотите иметь настоящие тени с препятствиями, вы, вероятно, найдете this статью очень полезная. Но это намного медленнее и требует специальных шейдеров.
Существует также нет возможности использовать Box2dLights без Box2D кстати.
По-моему, отмеченный ответ неверен.
Его фактически довольно простой в использовании box2dLights без использования box2d, если вы не хотите никаких теней. Вопрос состоял в том, что если можно добавить какой-то кругный круг вокруг персонажа.
Я использовал два разных подхода, только один, используя box2dlights.
Статья в отмеченном ответе описывает метод, использующий FBO. U действительно не нужно, если вы просто хотите осветить область. U просто нужен спрайт, например this. Теперь поместите его где-нибудь на уры экрана, и при рендеринге, сделайте следующее:
batch.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
theLightSprite.draw(batch, parentAlpha);
batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Первой функция смеси изменяется, поэтому мы не только делаем спрайт, но смешайте его в осветительном образе на заднем плане. После его рисования сбросьте функцию смешивания в нормальное состояние, так что все остальное после этого снова отображается нормально. Это оно.
Второй подход использует box2dlights. Да, нам нужен объект box2d world, но нам не нужно что-то делать с ним. Итак, что мы делаем:
world = new World(new Vector2(0,0),false);
rayHandler = new RayHandler(world);
rayHandler.setCombinedMatrix(stage.getCamera().combined);
new PointLight(rayHandler,1000, Color.BLUE,radius,x_position,y_position);
Сначала мы создаем наш мир, который просто ничего не делает. Нам нужно только это для второго утверждения, где мы создаем наш RayHandler, который вычисляет наши огни. В третьем утверждении мы устанавливаем матрицу лучевого Хандлера. В этом случае я использую scene2d, и, таким образом, используя для этого каскадную комбинированную матрицу. Если вы используете другую камеру, просто используйте ее комбинированную матрицу. Последнее утверждение создает pointlight с rayHandler и описывает количество лучей, цвет фона, его радиус и его положение.
Все, что мы должны сейчас сделать, это сделать нашу сцену или спрайтов в нашем методе визуализации() и вызвать
rayHandler.updateAndRender();
после этого в методе визуализации. Довольно легко.
Спасибо за ваш ответ, это верно и понятно! +1 – Springrbua
Спасибо за этот быстрый ответ. Я рассмотрю эту статью как можно скорее. Благодаря! – Springrbua
Думаю, я понял, как это работает. В libgdx я мог бы использовать метод draw на моей сцене и перегружать все с помощью darkblue, прозрачным (Alpha = 0.7f или что-то в этом роде). Цвет для добавления окружающего света? Но как я могу добавить яркий свет к персонажу? Спасибо – Springrbua
Сначала вы делаете свою сцену обычным способом. Затем вы создаете FBO размера вашего экрана, но вы устанавливаете свой (фоновый) цвет на что-то вроде (0,7, 0,7, 0,7, 1,0), например (окружающая молния). После этого вы нарисуете все свои огни на этом FBO, точно так же, как вы нарисуете что-то в своей обычной сцене. Они будут белыми пятнами поверх более темного фона. Когда вы закончите с этим, вы окажете это FBO с включенным смешением поверх вашей обычной сцены. Все места без света станут темнее из-за темного окружающего цвета fbo. Все остальные станут ярче (огни). – noone