好的,我有这段代码
@Override
public void render() {
// do not update game world when paused
if (!paused) {
// Update game world by the time that has passed
// since last render frame
worldController.update(Gdx.graphics.getDeltaTime());
}
// Sets the clear screen color to: Cornflower Blue
Gdx.gl.glClearColor(0x64/255.0f, 0x95/255.0f, 0xed/255.0f,
0xff/255.0f);
// Clears the screen
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// Render game world to screen
worldRenderer.render();
}
它在屏幕上绘制浅蓝色背景。我试图创建一个从顶部的深蓝色到底部的浅蓝色的渐变。有一个简单的方法吗?我是Libgdx和OpenGL的新手,所以我试图从一本书中学习,但我似乎无法找到这个答案。我听说画了一个大的正方形并且顶点有不同的颜色,但我不确定如何做到这一点。
答案 0 :(得分:25)
在libGDX中,ShapeRenderer对象包含一个drawRect()
方法,该方法接受其位置和大小以及四种颜色的参数。这些颜色转换为4角渐变。如果你想要一个垂直渐变,只需使顶角为一种颜色,底角为另一种颜色。像这样:
shapeRenderer.filledRect(x, y, width, height, lightBlue, lightBlue, darkBlue, darkBlue);
来自ShapeRenderer的API:
4种颜色参数指定矩形左下角,右下角,右上角和左上角的颜色,允许您创建渐变。
答案 1 :(得分:8)
似乎在后期libGDX版本中删除了ShapeRenderer.filledRect方法。现在,这样做的方法如下:
shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
shapeRenderer.rect(
x,
y,
width,
height,
Color.DARK_GRAY,
Color.DARK_GRAY,
Color.LIGHT_GRAY,
Color.LIGHT_GRAY
);
rect方法的参数与fillRect中的参数一样,就像Kevin Workman的回答一样。
答案 2 :(得分:0)
在进入ShapeRenderer
之前,还有一些值得注意的细节。我一个人会坚持伸展和着色Texture
。
private Color topCol = new Color(0xd0000000);
private Color btmCol = new Color(0xd0000000);
@Override
public void render(float delta) {
...
batch.end(); //Must end your "regular" batch first.
myRect.setColor(Color.YELLOW); // Must be called, I don't see yellow, but nice to know.
myRect.begin(ShapeRenderer.ShapeType.Filled); //Everyone else was saying call `set`.
//Exception informed me I needed `begin`. Adding `set` after was a NOP.
myRect.rect(
10, 400,
//WORLD_H - 300, // WORLD_H assumed 1920. But ShapeRenderer uses actual pixels.
420,
300,
btmCol, btmCol, topCol, topCol
);
myRect.end();
我希望在玩家健康状况下降时动态改变透明度。 btmCol
和topCol
对透明度没有影响,因此我会坚持Texture
。翻译像素空间并不是什么大问题,但这远远超过上面提到的单线或双线。