libGDX咨询速度

时间:2014-10-07 05:58:36

标签: java android eclipse libgdx

我需要做的是,当点数为"例如10"球的速度提高,当分数为"例如20"球的速度再次提高,等等。我不知道我是否在Ball类或GameScreen类中这样做,我不知道该怎么做。谢谢你的帮助!

public class Ball {

    //THE SPEED OF THE BALL
    private static final float SPEED=1100;

    //THE POINTS IS 
    puntuacion =0;

    //AND THE METHOD WHEN THE POINTS IS INCREAMENTING
    private void updatePuntuacion(){
        if(ball.getBordes().overlaps(Lpaddle.getBordes())) { 
            puntuacion = puntuacion + 1;
            if(puntuacion > puntuacionMaxima)
            puntuacionMaxima = puntuacion;
        }

        if(ball.getBordes().x <= 0) 
            sonidoex.play();

        if(ball.getBordes().x <= 0)
            puntuacion =0;

        if(ball.getBordes().x <=0)
            Gdx.input.vibrate(1000);

        if(ball.getBordes().x <=0)
            Screens.juego.setScreen(Screens.MAINSCREEN);

        ball.comprobarPosicionBola();
    }
}

编辑:

这是我的GameScreen课程。

public class GameScreen extends AbstractScreen {

    private SpriteBatch batch;
    private Texture texture;
    private Paddle Lpaddle, Rpaddle;
    private Ball ball;
    private BitmapFont font;
    private int puntuacion, puntuacionMaxima;
    private Preferences preferencias;
    private Music music;
    private Sound sonidoex;

    public GameScreen(Main main) {
        super(main);
            preferencias = Gdx.app.getPreferences("PuntuacionAppPoints");   
            puntuacionMaxima = preferencias.getInteger("puntuacionMaxima");
            music =Gdx.audio.newMusic(Gdx.files.internal("bgmusic.mp3"));
            music.play();
            music.setVolume((float) 0.3);
            music.setLooping(true);
            sonidoex = Gdx.audio.newSound(Gdx.files.internal("explosion5.wav"));
    }

    public void show(){
        batch = main.getBatch();
        texture = new Texture(Gdx.files.internal("spacebg.png"));

        Texture texturaBola = new Texture(Gdx.files.internal("bola.png"));
        ball = new Ball(Gdx.graphics.getWidth() / 2 - texturaBola.getWidth() / 2, Gdx.graphics.getHeight() / 2 - texturaBola.getHeight() / 2);
        Texture texturaPala= new Texture(Gdx.files.internal("pala.png"));
        Lpaddle = new LeftPaddle(80, Gdx.graphics.getHeight()/2 -texturaPala.getHeight() /2);
        Rpaddle = new RightPaddle(Gdx.graphics.getWidth() -100, Gdx.graphics.getHeight()/2 - texturaPala.getHeight() /2, ball);
        font = new BitmapFont(Gdx.files.internal("pointsfont.tf.fnt"), Gdx.files.internal("pointsfont.tf.png"), false);
        puntuacion = 0;    
    }

    public void render(float delta){
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        updatePuntuacion();
        Lpaddle.update();
        Rpaddle.update();
        ball.update(Lpaddle, Rpaddle);
        batch.begin();
        batch.draw(texture, 0, 0,texture.getWidth(), texture.getHeight());
        ball.draw(batch);
        Lpaddle.draw(batch);
        Rpaddle.draw(batch);
        font.draw(batch, "Points: " + Integer.toString(puntuacion), Gdx.graphics.getWidth() / 4 ,Gdx.graphics.getHeight() - 5);
        font.draw(batch, "High score: " + Integer.toString(puntuacionMaxima),Gdx.graphics.getWidth() - Gdx.graphics.getWidth() / 4 ,Gdx.graphics.getHeight() - 5);
        batch.end();
    }

    private void updatePuntuacion(){
        if(ball.getBordes().overlaps(Lpaddle.getBordes())) { 
            puntuacion = puntuacion + 1;
            if(puntuacion > puntuacionMaxima)
            puntuacionMaxima = puntuacion;
        }

        if(ball.getBordes().x <= 0) 
            sonidoex.play();

        if(ball.getBordes().x <= 0)
            puntuacion =0;

        if(ball.getBordes().x <=0)
            Gdx.input.vibrate(1000);

        if (puntuacion % 10 == 0){
             SPEED = 200;
        }

        if(ball.getBordes().x <=0)
            Screens.juego.setScreen(Screens.MAINSCREEN);

        ball.comprobarPosicionBola();
    }

    public void hide(){
        font.dispose();
        texture.dispose();
    }

    @Override
    public void dispose(){
        preferencias.putInteger("puntuacionMaxima", puntuacionMaxima);
        preferencias.flush();
    }

    public void resize(int width, int height){      
        float widthImage = texture.getWidth();
        float heightImage = texture.getHeight();
        float r = heightImage / widthImage;
        if(heightImage > height) { 
            heightImage = height;
            widthImage = heightImage / r;
        }

        if(widthImage > width) { 
            widthImage = width;
            heightImage = widthImage * r;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我需要50个评论才能发表评论,所以我会发布一个答案,尽量让它尽可能有用。

首先,我不太确定你的问题,但据我所知,你想在puntuacion达到某个值(10,20等)时提高你的速度。

您要做的第一件事就是从final变量中删除SPEED,因为final原语只能设置一次,因此拒绝您稍后更改它。

至于更新速度,如果您想以punctuacion的特定值进行更新,那么只需执行

if(punctuacion == 10 || punctuacion == 17) { // etc
    speed += x; // x being the value you want to increase the speed by
}

或者,如果您想以每10个增量更新速度,例如,您可以

if (punctuacion % 10 == 0){
    speed += x;
}

请注意,对于第二个示例,当punctuacion0时,if语句将返回true,因此如果必须,请解决此问题。

至于在哪里放这个代码,它真的取决于你的类,你肯定没有发布足够的代码让我能够帮助你,但我最好的猜测是在你增加后把它放好punctuacion,因为我假设您希望在punctuacion更新后立即执行球速更新检查。

答案 1 :(得分:0)

这是我的GameScreen课程。

public class GameScreen extends AbstractScreen {

    private SpriteBatch batch;
    private Texture texture;
    private Paddle Lpaddle, Rpaddle;
    private Ball ball;
    private BitmapFont font;
    private int puntuacion, puntuacionMaxima;
    private Preferences preferencias;
    private Music music;
    private Sound sonidoex;

    public GameScreen(Main main) {
        super(main);
            preferencias = Gdx.app.getPreferences("PuntuacionAppPoints");   
            puntuacionMaxima = preferencias.getInteger("puntuacionMaxima");
            music =Gdx.audio.newMusic(Gdx.files.internal("bgmusic.mp3"));
            music.play();
            music.setVolume((float) 0.3);
            music.setLooping(true);
            sonidoex = Gdx.audio.newSound(Gdx.files.internal("explosion5.wav"));
    }


    public void show(){
        batch = main.getBatch();
        texture = new Texture(Gdx.files.internal("spacebg.png"));

        Texture texturaBola = new Texture(Gdx.files.internal("bola.png"));
        ball = new Ball(Gdx.graphics.getWidth() / 2 - texturaBola.getWidth() / 2, Gdx.graphics.getHeight() / 2 - texturaBola.getHeight() / 2);
        Texture texturaPala= new Texture(Gdx.files.internal("pala.png"));
        Lpaddle = new LeftPaddle(80, Gdx.graphics.getHeight()/2 -texturaPala.getHeight() /2);
        Rpaddle = new RightPaddle(Gdx.graphics.getWidth() -100, Gdx.graphics.getHeight()/2 - texturaPala.getHeight() /2, ball);
        font = new BitmapFont(Gdx.files.internal("pointsfont.tf.fnt"), Gdx.files.internal("pointsfont.tf.png"), false);
        puntuacion = 0;


    }


    public void render(float delta){
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        updatePuntuacion();
        Lpaddle.update();
        Rpaddle.update();
        ball.update(Lpaddle, Rpaddle);
        batch.begin();
        batch.draw(texture, 0, 0,texture.getWidth(), texture.getHeight());
        ball.draw(batch);
        Lpaddle.draw(batch);
        Rpaddle.draw(batch);
        font.draw(batch, "Points: " + Integer.toString(puntuacion), Gdx.graphics.getWidth() / 4 ,Gdx.graphics.getHeight() - 5);
        font.draw(batch, "High score: " + Integer.toString(puntuacionMaxima),Gdx.graphics.getWidth() - Gdx.graphics.getWidth() / 4 ,Gdx.graphics.getHeight() - 5);
        batch.end();
    }

    private void updatePuntuacion(){
        if(ball.getBordes().overlaps(Lpaddle.getBordes())) { 
            puntuacion = puntuacion + 1;
            if(puntuacion > puntuacionMaxima)
            puntuacionMaxima = puntuacion;

        }
        if(ball.getBordes().x <= 0) 
            sonidoex.play();

        if(ball.getBordes().x <= 0)
        puntuacion =0;

        if(ball.getBordes().x <=0)
            Gdx.input.vibrate(1000);

        if (puntuacion % 10 == 0){
             SPEED = 200;
        }

        if(ball.getBordes().x <=0)
            Screens.juego.setScreen(Screens.MAINSCREEN);

        ball.comprobarPosicionBola();
        }





    public void hide(){
        font.dispose();
        texture.dispose();

    }

    @Override
    public void dispose(){
        preferencias.putInteger("puntuacionMaxima", puntuacionMaxima);
        preferencias.flush();
    }

    public void resize(int width, int height){      
        float widthImage = texture.getWidth();
        float heightImage = texture.getHeight();
        float r = heightImage / widthImage;
        if(heightImage > height) { 
            heightImage = height;
            widthImage = heightImage / r;
        }
        if(widthImage > width) { 
            widthImage = width;
            heightImage = widthImage * r;
        }


    }

}