J'ai un programme où je dessine des lignes sur chaque image en utilisant ShapeRenderer
. Sur chaque image je veux dessiner sur le précédent, fané d'un montant, cadre. Donc ce que je fais est d'abord dessiner un rectangle noir avec un alpha inférieur à 1, puis dessiner l'image en cours. Sur le bureau, il fonctionne bien et le résultat est quelque chose comme çaLibGdx `ShapeRenderer` sur Android n'honore pas canal alpha
Mais sur Android ne fonctionne pas. Cela rend comme ça.
I essayé permettant le mélange avant de tirer rectangle
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
également essayé seting le canal alpha 8 bits dans AndroidApplicationConfiguration
(config.a = 8
) Rien de ceux-ci travaille. Quoi d'autre puis-je essayer? Y a-t-il aussi un meilleur moyen de réaliser ce que je veux?
code écran
package com.waterpaw.trochoids.screen;
import java.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.waterpaw.trochoids.Trochoid;
import com.waterpaw.trochoids.Trochoids;
public class GameScreen extends BaseScreen {
private ShapeRenderer sr;
private ScreenViewport viewport;
private List<Trochoid> trochoids = new ArrayList<Trochoid>();
public GameScreen(Trochoids game) {
super(game);
viewport = new ScreenViewport();
Gdx.input.setInputProcessor(this);
sr = new ShapeRenderer();
}
private int resized;
@Override
public void resize(int width, int height) {
viewport.update(width, height);
trochoids.clear();
trochoids.add(new Trochoid(viewport.getWorldWidth(), viewport.getWorldHeight()));
resized = 2;
}
@Override
public void render(float delta) {
if(resized-- > 0) {
Gdx.gl.glClearColor(0f, 0f, 0f, 0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
processInput();
if(!trochoids.get(0).isPaused()) {
updateTrochoids();
renderTrochoids();
}
}
private void processInput() {
if(Gdx.input.isKeyJustPressed(Keys.P)) {
if(trochoids.get(0).isPaused()) {
trochoids.get(0).unpause();
} else {
trochoids.get(0).pause();
}
} else if(Gdx.input.isKeyJustPressed(Keys.SPACE)) {
touchDown(0, 0, 0, 0);
}
}
@Override
public void dispose() {
sr.dispose();
}
@Override
public boolean touchDown(int x, int y, int pointer, int button) {
trochoids.get(0).initialize();
return true;
}
public void renderTrochoids() {
sr.setProjectionMatrix(viewport.getCamera().combined);
float w = viewport.getWorldWidth();
float h = viewport.getWorldHeight();
sr.setColor(0, 0, 0, 0.1f);
sr.begin(ShapeRenderer.ShapeType.Filled);
sr.rect(-w/2, -h/2, w, h);
sr.end();
sr.begin(ShapeRenderer.ShapeType.Line);
for(int i = 0; i < trochoids.size(); i++) {
trochoids.get(i).render(sr);
}
sr.end();
}
private void updateTrochoids() {
for(int i = 0; i < trochoids.size(); i++) {
trochoids.get(i).update();
}
}
}
Est-ce que le format interne du tampon de dessin (ou frame buffer) possède un canal alpha (RGB au lieu de RGBA)? – Rabbid76
@ Rabbid76 Comment puis-je voir ça? Ne devrait pas définir config.a = 8 résoudre ce problème? – alfoks
Définissez les quatre couleurs de la configuration sur 8. Un téléphone ne prend en charge qu'un certain nombre de combinaisons. 5658 n'est certainement pas l'un d'entre eux, alors LibGDX doit choisir pour vous et cela pourrait être imprévisible. Ce n'est pas votre problème, cependant. – Tenfour04