【发布时间】:2014-07-26 09:09:32
【问题描述】:
我正在使用 libGDX 和 scene2D 的各个方面。
我有一个主游戏类(下面的代码)。这个主要的游戏类实现了 Screen 并有一个舞台。 我还有两个扩展 Actor 的类(Dino 和 SpaceMonster)。
当 Dino 类中的 Rectangle 和 SpaceMonster 类中的 Rectangle 重叠时,我希望能够播放一次声音。
问题:无论我尝试将播放声音的代码部分放在哪里,它都会以非常接近的间隔多次播放声音。我很确定这是因为我一直在将代码(处理重叠和相应的声音)放入每秒更新多次的方法中。
问题:有人可以向我解释一下我可以将代码部分(处理重叠和相应的声音)放在哪里,它只会干净地播放一次吗?请注意,我已尝试将它放在 Dino 类和 SpaceMonster 类中(在不同的场合),但是当重叠发生时我听不到任何声音,或者我遇到与上面相同的问题(声音因为正在播放而扭曲每秒多次),具体取决于我将代码插入的方法。
此外,如果有人可以向我解释当我使用“实现屏幕”时我应该将游戏逻辑相关代码放在哪里(在一个不会不断更新的位置),那就太好了。我在理解更新时遇到了一些问题。
public class GameScreen implements Screen
{
private Stage stage;
private Dino dino;
private SpaceMonster spaceMonster;
private Sound spacebarSound;
public GameScreen(final ScreenManager gam)
{
this.game = gam;
stage = new Stage(new FitViewport(800, 480));
Gdx.input.setInputProcessor(stage);
dino = new Dino();
spaceMonster = new SpaceMonster();
stage.addActor(dino);
stage.addActor(spaceMonster);
spacebarSound = Gdx.audio.newSound(Gdx.files.internal("data/spacebarSound.mp3"));
}
@Override
public void resize(int width, int height)
{
}
@Override
public void render(float delta)
{
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
for (Rectangle spacebarRectangle : spacebar.getSpacebarRectangles()) // section of code
if (spacebarRectangle.overlaps(dino.getDinoRectangle()))
spacebarSound.play();
}
@Override
public void pause()
{
}
@Override
public void resume()
{
}
@Override
public void show()
{
}
@Override
public void hide()
{
}
@Override
public void dispose()
{
}
}
【问题讨论】: