我有一個程序,我使用ShapeRenderer
在每一幀上繪製一些行。在每一幀我想畫在前面的頂部,消除一定量的幀。 所以我在做的是先繪製一個alpha小於1的黑色矩形,然後繪製當前幀。在桌面電腦上運作良好,結果是這樣的Android上的LibGdx`ShapeRenderer`不支持alpha通道
但在Android這是行不通的。它呈現像這樣。
我試圖繪製矩形
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
還試圖塞汀alpha通道8位AndroidApplicationConfiguration
的這些工作(config.a = 8
) 沒有之前使混合。我還能嘗試什麼? 也有更好的方式來實現我想要的?
屏幕代碼
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();
}
}
}
繪圖緩衝區(或幀緩衝區)的內部格式是否具有alpha通道(RGB而不是RGBA)? – Rabbid76
@ Rabbid76我怎麼看?不應該設置config.a = 8解決這個問題? – alfoks
將配置的所有四種顏色設置爲8.手機僅支持一組特定的組合。 5658幾乎肯定不是其中之一,因此LibGDX必須爲您選擇,這可能是不可預測的。但這不是你的問題。 – Tenfour04