gpt4 book ai didi

android - Android 上的 LibGdx `ShapeRenderer` 不支持 alpha channel

转载 作者:行者123 更新时间:2023-11-30 00:24:02 25 4
gpt4 key购买 nike

我有一个程序,我使用 ShapeRenderer 在每一帧上绘制一些线条。在每一帧上,我想在前一帧之上绘制,淡出一定量的帧。所以我所做的是首先绘制一个 alpha 小于 1 的黑色矩形,然后绘制当前帧。在桌面上运行良好,结果是这样的

enter image description here

但在 Android 上它不起作用。它呈现如下。

enter image description here

我尝试在绘制矩形之前启用混合

Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

还尝试在 AndroidApplicationConfiguration (config.a = 8) 中将 alpha channel 设置为 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();
}
}
}

最佳答案

LibGDX 在 Android 上使用双缓冲,因此您的技术不起作用。绘制到 FrameBuffer,这样您就可以确保您之前的绘制不会每隔一帧就被清除一次。然后在每一帧上将 FrameBuffer 的颜色纹理绘制到屏幕上。

关于android - Android 上的 LibGdx `ShapeRenderer` 不支持 alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45733642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com