Java Pong Game,Paddle不动

时间:2017-11-19 08:51:41

标签: java keylistener pong

按下VK_UPVK_DOWN时,我创建的Graphic g并未改变其位置。如果有人可以查看我的移动方法是否有问题等等。真的很感激。

到目前为止,这是我的所有代码:

package ping2; 
import java.applet.Applet;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


public class Ping2 extends Applet implements Runnable, KeyListener{
final int WIDTH = 700, HEIGHT = 500;
Thread thread;
UserPaddle user1;
public void init() {


    this.resize(WIDTH, HEIGHT);
    this.addKeyListener(this);
    user1 = new UserPaddle(1);
    thread = new Thread(this);

    thread.start();


}

public void paint(Graphics g) {
    g.setColor(Color.black);
    g.fillRect(0, 0, WIDTH, HEIGHT);
    user1.draw(g);
}

public void update(Graphics g) {
    paint(g);
}








    public void run() {
    for(;;) {

        user1.move();

        repaint();
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public void keyPressed(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_UP) {
        user1.setUpAccel(true);
    }
    else if(e.getKeyCode() == KeyEvent.VK_DOWN) {

        user1.setDownAccel(true);
    }
}

public void keyReleased(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_UP) {
        user1.setUpAccel(false);
    }
    else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
        user1.setDownAccel(false);
    }
}

public void keyTyped(KeyEvent arg0) {


}

}

package ping2;

import java.awt.*;


public class UserPaddle implements InterfaceBar{

double y, yVelocity;
boolean upAccel, downAccel;
int player1, x;
final double FRICTION = 0.90;

    public UserPaddle(int player1) {
    upAccel = false; 
    downAccel = false;
    y = 210; 
    yVelocity = 0;
    if(player1 == 1)
        x = 20;
    else
        x = 660;
}

public void draw(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(x, (int)y, 20, 80);
}

public void move() {
    if(upAccel) {
        yVelocity -= 2;
    }else if(downAccel) {
        yVelocity += 2;
    }
    //Automatically slows bar down if key not being pressed.
    else if(!upAccel && !downAccel) {
        yVelocity *= FRICTION;
    }
}
public void setUpAccel(boolean input) {
    upAccel = input;
}
public void setDownAccel(boolean input) {
    downAccel = input;
}



public int getY() {

    return (int)y;
}

}
package ping2;

import java.awt.Graphics;

public interface InterfaceBar {

public void draw(Graphics g);
public void move();
public int getY();


}

1 个答案:

答案 0 :(得分:0)

我已经修改了你的move()一点试试

移动()

public void move() {
    if(upAccel) {
        yVelocity -= 2;
        y = yVelocity;
    }else if(downAccel) {
        yVelocity += 2;
        y = yVelocity;
    }
}