krembrule2016
@krembrule2016

Почему Shaperenderer не хочет изменять прозрачность?

Привет!

Сломал уже весь мозг. Суть проблемы. Есть Shaperenderer и он рисует обычный rectline().
Я написал функцию, которая с помощью delta-time меняет его прозрачность. Выглядит все это так, код не полный, но тут передана суть.
public void disapearingTentacle(float delta){
        Iterator<Tentacle> iter = controlElement.getDisapearingTentacle().iterator();
        boolean find = true;
        while (iter.hasNext()){
           //тут магия, шобы не загрязнять вам мозги лишней инфой
            }else find = false;
            if(find == false){
                System.out.println(str.trans); // тут я в консоле воочию наблюдая, как переменная trans действительно как того требует логика моего воспаленного мозга изменяет свое значение, и она float
                if(str.trans > 0) rend.setColor(0,0,0,str.trans);
                str.trans -= 0.5f*delta; // тут мы ее уменьшаем со временем
                if(str.trans < 0) // если ушли за ноль, то эта str самое слабое звено - прощайте..!!
                iter.remove();
                else str.renderLine(rend); // иначе мы должны отрисовать прямоугольник с прозрачными линиями
            }
        }
    }

renderLine содержит банальщину, это чтобы убедиться, что я не лось
public void renderLine(ShapeRenderer rend){
        this.rend = rend;
        rend.rectLine(startCoordinateX, startCoordinateY, endCoordinateX, endCoordinateY, width);
    }

Один чувак посоветовал мне произнести вот такие заклинания
Gdx.gl.glEnable(GL20.GL_BLEND);
		Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

я и это произнес, но СОТОНА так и не появился, даже черная магия не сделала мою прямую полупрозрачной.
Кстати, да, я рисую прямую с помощью прямоугольника, ведь libgdx, java или б-г знает какие еще высшие силы не предусмотрели рисование нормальным способом прямой нужной толщины. (>_<)
Что мне делать?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@exenza
А что вообще рендерится? Прямоугольник рисуется?

Трудно так сразу сказать - все-таки не понятно откуда этот `disappearingTentacle` вызывается и много остального не показано. Попробуйте упростить и подебажить.
В качестве отправной точки вот простенький рабочий пример:
package com.mygdx.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;

public class RectrenderTest extends ApplicationAdapter {
    private ShapeRenderer shapeRenderer;
    private float alpha = 1f;
    private float dAlpha = -0.5f;
    private boolean fadingOut = true;

    @Override
    public void create() {
        shapeRenderer = new ShapeRenderer();
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        // Включается блендинг:
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        // Задается форма:
        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
        update(Gdx.graphics.getDeltaTime());
        // Задается цвет и прозрачность alpha:
        shapeRenderer.setColor(new Color(1, 1, 1, alpha));
        // Рисуется линия:
        shapeRenderer.line(0, 0, 470, 350);
        shapeRenderer.end();
        // Выключается блендинг:
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    private void update(float dt) {
        // System.out.println("dt=" + dt + ", alpha=" + alpha + ", dAlpha=" + dAlpha);
        // Если прозрачность за пределами допустимых значений, меняем направление
        if (fadingOut && alpha <= 0 || !fadingOut && alpha >= 1f) {
            dAlpha = -dAlpha;
            fadingOut = !fadingOut;
        }
        alpha += dAlpha * dt;
    }

    @Override
    public void dispose() {
        shapeRenderer.dispose();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽