我正在开发一个Java游戏。我使用libGDX作为库。我显然使用策略设计模式。
这是我的SpawnMapScreen类。它扩展了BaseScreen。
public void render(float delta) {
super.render(delta);
npcTalking.update(Gdx.graphics.getDeltaTime());
npcRunning.update(Gdx.graphics.getDeltaTime());
renderer.getSpriteBatch().begin();
WorldVars.player.draw(renderer.getSpriteBatch());
npcTalking.draw(renderer.getSpriteBatch());
npcRunning.draw(renderer.getSpriteBatch());
renderer.getSpriteBatch().end();
}
这是我的BaseScreen类。它实现了Screen。
public void render(float delta) {
Gdx.graphics.setTitle("AHH V. " + version + " || Running at a mighty " + Gdx.graphics.getFramesPerSecond() + "fps"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
WorldVars.player.update(Gdx.graphics.getDeltaTime());
renderer.setView(camera);
renderer.render();
camera.position.set(WorldVars.player.getX() + WorldVars.player.getWidth() / 2, WorldVars.player.getY() + WorldVars.player.getHeight() / 2, 0);
camera.update();
spriteBatch.begin();
font.draw(spriteBatch, version, 0, 100);
spriteBatch.end();
}
这是我的问题。在我的BaseScreen类中,我想检查是否按下了转义键。如果是,我想切换屏幕。问题是,当我调用我的游戏实例的setScreen(Screen screen)
方法时,它会更改屏幕,但会继续渲染方法中的过程。它是这样的:
它应该如何运作:
有可能这样做吗?
答案 0 :(得分:1)
你只需要一个全局(在该函数所在的类的成员中)布尔标志来检查SpawnMapScreen以确定是否做任何事情。或者它可以检查当前的屏幕成员。
答案 1 :(得分:0)
我改变了处理输入处理的方式。实际上,我选择了一个InputProcessor类(称为InputSystem),这样我就可以在同一个地方处理所有输入。每次创建新的BaseScreen时,我也会调用Gdx.input.setInputProcessor(new InputSystem)
答案 2 :(得分:0)
我不认为这是使用策略的情况。战略背后的整个想法是一种可插拔的做事方式。例如,Swing中的LayoutManagers或者排序(例如Bubble vs. Quicksort或者其他..如果你有一堆条件逻辑,那么它应该在Strategy实现之外。
实际上,在再次阅读时,我有一个具体的建议:使用状态模式。你要做的是有两个状态处理程序然后你监听转义键,当它被按下时,你交换EscapeHandler,它在调用布局之前实现变体行为。