我一直想知道如何在libgdx / java中创建一个健康栏。我正在研究一个Shape Renderer,我认为我可以使用填充形状来创建一个健康栏,但我不确定如何在这个方向上进行操作。另一方面,我一直在研究使用scene2D和NinePatches为游戏创建健康栏。我试图通过在谷歌上查找网站来使用NinePatch / Scene2D,虽然看起来当我添加代码时,我总是遇到问题,当我尝试将其渲染到我的屏幕时。所以,如果有人可以帮助我使用任何方法在libgdx中创建一个功能健康栏,我将非常感激。谢谢。
我还不能发布图片,因为我没有发布10个帖子。所以这是链接http://gyazo.com/6650f3d820f31c99c3f8061ebed0bdec。遗憾
答案 0 :(得分:1)
我对Scene2D和阶段没有任何经验,但这是我如何做一个简单的健康栏:
spriteBatch(viewportCam.Combined)
public void Draw() { spriteBatch(normalCam.combined); spriteBatch.begin(); //Normal draw logic. spriteBatch.end(); spriteBatch(viewportCam.combined); spriteBatch.begin(); //Draw UI elements last so the will be drawn on top of the rest. spriteBatch.end(); }
修改强>
刚刚遇到这个并且目前正在使用其他方法。我是一个1像素宽的红色渐变的九点。 health = new NinePatch(gradient, 0, 0, 0, 0)
这可确保在拉伸时不会出现伪影。从这里我只计算它需要多长时间并绘制它。
width = currentHealth / totalHealth * totalBarWidth;
现在你可以在任何你想要的地方画画了。
health.draw(batch, 10, 10, width, gradient.getHeight);
如果你想要一些容器,你可以为它设置一个9patch并在后台的动态健康状态之前绘制它。因此,假设容器在顶部/底部较大,在左侧/右侧较大。
container = new NinePatch(containerRegion, 5, 5, 2, 2);
//Offset it by the dynamic bar, let's say the gradient is 4 high.
container.draw(batch, 5, 8, totalBarWidth + 10, 8);
health.draw(batch, 10, 10, width, 4);
我将容器5“硬编码”到左侧,使其长10,使其水平放置。我垂直地将它降低了2并使其高8以完全适合该杆。
答案 1 :(得分:1)
这就是你如何做到这一点,实现你自己的逻辑
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
int i=0;
Texture texture,texture2;
@Override
public void create () {
batch = new SpriteBatch();
initTestObjects() ;
}
@Override
public void render () {
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(texture2,100,100,300,20);
batch.draw(texture,100,100,i,20);
if(i>300)
{
i=0;
}
i++;
batch.end();
}
private void initTestObjects() {
int width =1 ;
int height = 1;
Pixmap pixmap = createProceduralPixmap(width, height,0,1,0);
Pixmap pixmap2 = createProceduralPixmap(width, height,1,0,0);
texture = new Texture(pixmap);
texture2 = new Texture(pixmap2);
}
private Pixmap createProceduralPixmap (int width, int height,int r,int g,int b) {
Pixmap pixmap = new Pixmap(width, height, Format.RGBA8888);
pixmap.setColor(r, g, b, 1);
pixmap.fill();
return pixmap;
}
}