簡體   English   中英

如何使精靈在屏幕的側面反彈

[英]How to make sprite bounce of the sides of the screen

我在Java Android Studio中使用libgdx。 我才剛開始。 我正在使用Android手機。 我沒有使用任何相機。 我想要的只是屏幕所有四個側面的精靈反彈而無需點擊。 我嘗試了很多我認為會起作用的代碼,但沒有。 我希望你們能幫助我。 我希望盡快得到答案。 謝謝

這就是我所擁有的:

SpriteBatch batch;
Texture background;
Sprite backgroundsprite;
Sprite ballsprite;
Texture line;
Texture ballimg;
BitmapFont credits;
BitmapFont input;
BitmapFont play;
float dt;
String string = "";
float ballx;
float bally;


float speedx;
float speedy;

Rectangle screenrect;
Rectangle ballrect;
float screenLeft ;
float screenBottom ;
float screenTop ;
float screenRight ;


@Override
public void create() {
    batch = new SpriteBatch();
    speedx = 5f * dt;
    speedy = 5f * dt;
    createsprite();
    createbackground();
    createtext();

    ballx = ballsprite.getX();
    bally = ballsprite.getY();

}
@Override
public void render() {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    dt = Gdx.graphics.getDeltaTime();



    ballsprite.setPosition(ballx + speedx,ballsprite.getY());
    ballsprite.translateX(speedx);

    float left = ballrect.getX();
    float bottom = ballrect.getY();
    float top = bottom + ballrect.getHeight();
    float right = left + ballrect.getWidth();



    if(left < screenLeft) {
        string = "left";
        speedx = 5f*dt;
    }
    if(right > screenRight)
    {
        string = "right";
        speedx = -5f*dt;
    }

    if(bottom < screenBottom)
    {
        string = "bottom";

    }
    if(top > screenTop)
    {
        string = "top";

    }



    batch.begin();
    backgroundsprite.draw(batch);
    ballsprite.draw(batch);
    rendertext();

    batch.end();
}

public void createbackground() {

    background = new Texture("images/BackgroundGodwin.jpg");
    backgroundsprite = new Sprite(background);
    backgroundsprite.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    screenrect = new Rectangle(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    screenLeft = screenrect.getX();
    screenBottom = screenrect.getY();
    screenTop = screenBottom + screenrect.getHeight();
    screenRight = screenLeft + screenrect.getWidth();

}

public void createsprite() {

    ballimg = new Texture("images/SpriteGodwin.png");
    ballsprite = new Sprite(ballimg);
    ballsprite.setScale(0.65f);
    ballsprite.setPosition(Gdx.graphics.getWidth()/3,Gdx.graphics.getHeight()/2);
    ballrect = new Rectangle(ballsprite.getBoundingRectangle());
}

@Override
public void dispose() {
    batch.dispose();
    ballimg.dispose();
    background.dispose();
    credits.dispose();
    play.dispose();
    input.dispose();
    line.dispose();
}

public void createtext(){
    play = new BitmapFont(Gdx.files.internal("fonts/realfont.fnt"));
    play.setColor(com.badlogic.gdx.graphics.Color.GOLD);

    credits = new BitmapFont(Gdx.files.internal("fonts/realfont.fnt"));
    credits.setColor(com.badlogic.gdx.graphics.Color.GOLD);

    input = new BitmapFont(Gdx.files.internal("fonts/realfont.fnt"));
    input.setColor(com.badlogic.gdx.graphics.Color.OLIVE);
}

public void rendertext() {
    credits.draw(batch, "Maded", Gdx.graphics.getWidth() / 7 - 50, Gdx.graphics.getHeight() / 9);
    play.draw(batch, "Touch the Screen to play!!", Gdx.graphics.getWidth() / 2 - 175, Gdx.graphics.getHeight() - 80);
    input.draw(batch, string, Gdx.graphics.getWidth() / 2 - 160, Gdx.graphics.getHeight() - 120);
}

}

我對您想要的內容做了一個非常簡單的版本:

public class BouncyGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture ball;
    float speedX = 3f;
    float speedY = 3f;
    int x;
    int y;

    @Override
    public void create () {
        batch = new SpriteBatch();
        ball = new Texture("ball.png");
        x = Gdx.graphics.getWidth()/2;
        y = Gdx.graphics.getHeight()/2;
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        //When the ball's x position is on either side of the screen.
        //The width of the sprite is taken into account.
        if (x > Gdx.graphics.getWidth() - ball.getWidth()/2 || x < 0 + ball.getWidth()/2) {
            //Here we flip the speed, so it bonces the other way.
            speedX = -speedX;
        }
        //Same as above, but with on the y-axis.
        if (y > Gdx.graphics.getHeight() - ball.getHeight()/2 || y < 0 + ball.getHeight()/2) {
            speedY = -speedY;
        }

        //Move the ball according to the speed.
        x += speedX;
        y += speedY;

        batch.begin();
        //Draw the ball so the center is at x and y. Normally it would be drawn from the lower left corner.
        batch.draw(ball, x - ball.getWidth()/2, y - ball.getHeight()/2);
        batch.end();
    }
}

結果如下:

http://gfycat.com/TatteredCarefreeHapuku

有很多方法可以改進此代碼,例如可以使用向量,但我不建議在最終產品中使用它,但是它可以幫助您弄清楚如何為自己的項目做類似的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM