【发布时间】:2014-02-03 22:07:21
【问题描述】:
我正在开发一款 Java 游戏。我使用 libGDX 作为库。我显然在使用 Strategy 设计模式。
这是我的 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 课程。它实现了屏幕。
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) 方法时,它会更改屏幕,但会继续渲染方法中的过程。它是这样的:
- SpawnMapScreen 的 render(float delta) 方法被调用
- 在SpawnMapScreen的render(float delta)方法中,调用BaseScreen的render(float delta)方法
- 在BaseScreen中,检查是否按下了escape键,如果是,则切换屏幕
- 继续使用 SpawnMapScreen 的 render(float delta) 方法。
它应该如何工作:
- SpawnMapScreen 的 render(float delta) 方法被调用
- 在SpawnMapScreen的render(float delta)方法中,调用BaseScreen的render(float delta)方法
- 在BaseScreen中,检查是否按下了escape键,如果是,则切换屏幕
- 不要继续 de SpawnMapScreen 的 render(float delta) 方法
有没有办法这样做?
【问题讨论】:
-
好吧,你能在 SpawnMapScreen 类中使用你的 esc-key-detection 方法吗(因为它是从 BaseScreen 派生的)?
-
你如何切换屏幕?
-
@webuster 我不想这样做,因为 SpawnMapScreen 不是唯一的 BaseScreen 实例。我也有cave1Screen、cave2Screen等。我不想到处复制粘贴相同的代码
-
@Lestat 我没有展示我如何在代码中实际切换屏幕,但我只是调用我自己的方法:
SimpleTools.switchScreens(Screen screen),它比调用我的游戏实例 setScreen(Screen屏幕)方法。
标签: java oop design-patterns libgdx