libgdx:Spritebatch直到调整大小后才呈现

问题描述

长话短说:在调整窗口大小(甚至按1像素)之前,spritebatch不会渲染任何内容

长话:我正在按照Brent Aureli的有关如何创建游戏Flappy Bird的教程进行学习:每个游戏状态(标题菜单,播放屏幕,暂停屏幕等)都是{{1} }。 StateStates的形式管理Stack<State>GameStateManager调用位于堆栈顶部的GameStateManager的经典循环方法

我的问题:我在空堆栈中插入的第一个State(无论哪个)都可以。但是,如果我弹出/推入另一状态,它将不再呈现(我得到glClearColor屏幕)。如果我只是按另一种状态,则在我单击游戏窗口底部的角并调整大小之前都不会渲染。然后一切再次呈现。

大约4周前,我下载了libgdx和Android sdk。我真的很困惑。

这是代码

State

所以基本上:public class MyGame extends ApplicationAdapter { public static final int V_WIDTH = 800; public static final int V_HEIGHT = 480; public static final String title = "MyGame"; private GameStateManager gsm; private SpriteBatch sb; @Override public void create () { sb = new SpriteBatch(); gsm = new GameStateManager(); Gdx.gl.glClearColor(0,1,1); gsm.push(new FooState(gsm)); } @Override public void render () { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); gsm.update(Gdx.graphics.getDeltaTime()); gsm.render(sb); } @Override public void dispose () { } @Override public void resize(int width,int height) { gsm.resize(width,height); } @Override public void pause() { } @Override public void resume() { } } public abstract class State { protected OrthographicCamera cam; protected GameStateManager gsm; protected Viewport viewport; protected State(GameStateManager gsm){ this.gsm = gsm; cam = new OrthographicCamera(); viewport = new FitViewport(Arlesian.V_WIDTH/2,Arlesian.V_HEIGHT/2,cam); viewport.apply(); } protected abstract void handleinput(); public abstract void update(float dt); public abstract void render(SpriteBatch sb); public abstract void resize(int width,int height); public abstract void dispose(); } public class GameStateManager { private Stack<State> states; public GameStateManager(){ states = new Stack<State>(); } public void push(State state){ states.push(state); } public void pop(){ states.pop(); } public void set(State state){ states.peek().dispose(); states.pop(); states.push(state); } public void update(float dt){ states.peek().handleinput(); states.peek().update(dt); } public void render(SpriteBatch sb){ states.peek().render(sb); } public void resize(int width,int height){ states.peek().resize(width,height); } } public class FooState extends State { public FooState(GameStateManager gsm) { super(gsm); cam.setToOrtho(false,MyGame.V_WIDTH/2,MyGame.V_HEIGHT/2); } @Override protected void handleinput() { if(Gdx.input.isTouched()){ gsm.set(new FooState2(gsm)); } } @Override public void update(float dt) { cam.update(); } @Override public void render(SpriteBatch sb) { } @Override public void resize(int width,int height) { } @Override public void dispose() { } } public class FooState2 extends State { private Texture foo; private StretchViewport viewport; public FooState2(GameStateManager gsm) { super(gsm); foo = new Texture("badlogic.jpg"); cam.setToOrtho(false,MyGame.V_HEIGHT/2); } @Override protected void handleinput() { } @Override public void update(float dt) { cam.update(); } @Override public void render(SpriteBatch sb) { sb.setProjectionMatrix(cam.combined); sb.begin(); sb.draw(foo,0); sb.end(); } @Override public void resize(int width,int height) { } @Override public void dispose() { foo.dispose(); } }除了在我触摸屏幕后立即将FooState推入FooState2之外什么也没做。

会发生什么:我触摸屏幕,然后进入handleInput,更新,渲染的GameStateManager循环(我非常肯定这要归功于Syso)。但是badlogic徽标不会呈现,而是显示glClearColor屏幕。然后,我单击应用程序窗口的边框并调整一下大小,然后badlogic徽标再次呈现。

另一项测试:如果我只是将FooState2完全推入GameStateManager中,那么不需要我调整窗口大小即可呈现badlogic徽标。

能帮我吗?
提前谢谢!
对不起,我的英语不好。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)