簡體   English   中英

沒有按鍵時讓球停止移動?

[英]Make ball stop moving when no key is being pressed?

這是我的代碼:

public class Main extends Applet implements Runnable, KeyListener,
    java.awt.event.MouseListener {
int x_pos = 300;
int y_pos = 200;
int radius = 20;
int appletsize_x = 600;
int appletsize_y = 400;
double x_speed = 0;
double y_speed = 0;

private Image dbImage;
private Graphics dbg;

public void init() {
    this.setSize(600, 400);

}

public void start() {

    this.addKeyListener(this);
    this.addMouseListener(this);
    Thread th = new Thread(this);
    th.start();
}

public void stop() {

}

public void destroy() {

}

public void run() {

    // lower ThreadPriority
    this.requestFocusInWindow();
    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

    while (true) {

        repaint();
        x_pos += x_speed;
        y_pos += y_speed;

        // Hitting (right)
        if (x_pos > this.getSize().width - radius) {

            //x_speed = -x_speed;
            x_speed = 0;

        }
        // Hitting (left)
        if (x_pos < 0 + radius) {

            //x_speed = -x_speed;
            x_speed = 0;

        }
        // Hitting top
        if (y_pos < 0 + radius) {


            //y_speed = -y_speed;
            y_speed = 0;

        }

        // Hitting bottom
        if (y_pos > this.getSize().height - radius) {

            //y_speed = -y_speed;
            y_speed = 0;

        }

        try {
            // Stop thread for 1 milliseconds
            Thread.sleep(20);
        } catch (InterruptedException ex) {
            // do nothing
        }

        // set ThreadPriority to maximum value
        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

    }
}

public void paint(Graphics g) {
    // set colour
    g.setColor(Color.red);

    // paint a filled coloured circle
    g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
}

public void update(Graphics g) {

    if (dbImage == null) {
        dbImage = createImage(this.getSize().width, this.getSize().height);
        dbg = dbImage.getGraphics();
    }

    dbg.setColor(getBackground());
    dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);

    dbg.setColor(getForeground());
    paint(dbg);

    g.drawImage(dbImage, 0, 0, this);
}

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
        if (x_speed > 0) {
            x_speed = +x_speed;
            y_speed = 0;
        }
        if (x_speed == 0) {
            x_speed = -4;
            y_speed = 0;
        }
        if (x_speed < 0) {
            x_speed = +x_speed;
            y_speed = 0;
        }
    }
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        if (x_speed < 0) {
            x_speed = -x_speed;
            y_speed = 0;

            if (x_speed > 0) {
                x_speed = -x_speed;
                y_speed = 0;
            }
        }
        if (x_speed == 0) {
            x_speed = 4;
            y_speed = 0;
        }

    }
    if (e.getKeyCode() == KeyEvent.VK_UP) {
        if (y_speed > 0) {
            y_speed = -y_speed;
            x_speed = 0;
        }
        if (y_speed < 0) {
            y_speed = +y_speed;
            x_speed = 0;
        }
        if (y_speed == 0) {
            y_speed = -4;
            x_speed = 0;
        }
    }
    if (e.getKeyCode() == KeyEvent.VK_DOWN) {
        if (y_speed > 0) {
            y_speed = +y_speed;
            x_speed = 0;
        }
        if (y_speed < 0) {
            y_speed = -y_speed;
            x_speed = 0;
        }
        if (y_speed == 0) {
            y_speed = +4;
        }
        x_speed = 0;
    }
}

@Override
public void keyReleased(KeyEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent e) {
    System.out.println("HIT!");
    // TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

}
         }

當沒有按下任何按鈕時,如何讓球停止移動?

在您的 keyReleased 方法下,您應該能夠執行與您的 keyPressed 方法相反的操作。 也就是說,如果你按下右箭頭鍵,x_speed 加 1,當你松開它時,x_speed 減 1,對其他鍵使用類似的邏輯。

你能讓 keyReleased 上的 x_speed 和 y _speed 等於 0 嗎?

暫無
暫無

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

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