Как заставить изображение подпрыгивать горизонтально? - PullRequest
2 голосов
/ 03 октября 2011

У меня есть изображение ("ball.gif"), которое перемещается по горизонтали, проблема в том, как заставить шар отскочить, когда он достигнет конца размера панели?Я знаю, что это не очень сложно, но я немного запутался в том, как это сделать.

Может ли кто-нибудь помочь мне в этом вопросе?

Это то, что я пробовал до сих пор:

public void paint(Graphics g)
{
    super.paint(g);
    Graphics2D g2d = (Graphics2D)g;
   g2d.drawImage(ball, x, y, this);
   Toolkit.getDefaultToolkit().sync();

    g.dispose();
}


public void cycle()
{



    x += 1;
    y += 0;
    if (x >240)
    {


        x = 10;
        y = 10;
    }


}


public void run()
{

    long beforeTime, elapsedTimeDiff, sleep;

    beforeTime = System.currentTimeMillis();

    while (true)
    {

        cycle();
        repaint();

        elapsedTimeDiff = System.currentTimeMillis() - beforeTime;
        sleep = DELAY - elapsedTimeDiff;
        System.out.println(sleep);

        if (sleep < 0)
        {
            sleep = 2;
        }
        try
        {
            Thread.sleep(sleep);
        }
        catch (InterruptedException e)
        {
            System.out.println("interrupted");
        }

        beforeTime = System.currentTimeMillis();
    }
}

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Во-первых, вам нужно держать скорость в поле, а не жестко его кодировать:

private static final int RIGHT_WALL = 240;
private int x, y;
private int xVelocity = 1;


//...
x += xVelocity;
y += 0;  //change this later!

Затем, когда вы делаете проверку границ, переверните ваш xVelocity:

//...
if ( x > RIGHT_WALL ) {
   x = RIGHT_WALL;
   xVelocity *= -1;
}
1 голос
/ 03 октября 2011
private int dx = 1;

public void cycle() {
    x += dx;
    y += 0;
    if (x+star.getWidth() >= getWidth()) {
        dx = -1;
    }
    if (x <= 0) {
        dx = 1;
    }
}
...