2013-05-05 34 views
2

MyGroup的libgdx - ShapeRenderer在Group.draw呈現在顏色不對

public class GShape extends Group{ 
private ShapeRenderer shape; 

public GShape() { 
    super(); 
    shape = new ShapeRenderer(); 
} 

@Override 
public void draw(SpriteBatch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    shape.begin(ShapeType.Line); 
    Gdx.gl10.glLineWidth(5); 
    shape.setColor(1, 1f, 1f, 1f); 
    shape.line(0, 0, 200, 100); 
    shape.end(); 
} 
} 

主要

public class GameControl implements ApplicationListener { 
private Stage stage; 
private GShape gShape; 

@Override 
public void create() { 
    stage = new Stage(480,320,false); 

    Texture t = new Texture(Gdx.files.internal("data/the200.png")); 
    Image i = new Image(t); 
    stage.addActor(i); 
    gShape = new GShape(); 
    stage.addActor(gShape); 
} 

@Override 
public void dispose() { 
} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    stage.draw(); 
// gShape.render(); 
} 

@Override 
public void resize(int width, int height) { 
} 

@Override 
public void pause() { 
} 

@Override 
public void resume() { 
} 
} 

形狀的顏色不白?爲什麼?

http://nw7.upanh.com/b3.s38.d3/352dd792eb77ce6df204a7af47ae1ac6_55348087.cos.jpg?rand=0.19125773780979216

回答

10

你可能會得到不一致的結果,因爲你混合SpriteBatchShapeRenderer上下文。這些預期狀態,他們「存儲」在OpenGL中,維持在begin()end()調用之間。

Actordraw()方法被稱爲在其中SpriteBatchbegin()已經被稱爲上下文,所以你需要在開始你的ShapeRenderer之前結束它。 (你還需要在返回前重新啓動SpriteBatch

這樣的:

@Override 
public void draw(SpriteBatch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    batch.end(); // ** End the batch context 
    shape.begin(ShapeType.Line); 
    // .. draw lines ... 
    shape.end() 
    batch.begin(); // ** Restart SpriteBatch context that caller assumes is active 
} 
+1

我是現在明白了,謝謝你非常好:d – 2013-05-05 04:32:50

+2

只是一個側面說明,如果你調用開始()和結束()每幀大量(100s),你會注意到許多Android設備上的巨大性能。 – Jyro117 2013-05-05 17:50:17