我正在制作一款汽车游戏,我刚刚遇到了屏幕大小问题,它不允许汽车移动(它应该能够在所有屏幕上移动) ,也许jpanel的大小不是正确的大小。JFrame和JPanel大小在java中没有变化
主要和JPanel的:
public class MyCarGame extends JPanel implements Runnable {
CarPlayer Player;
public MyCarGame(GUI frame) {
Player = new CarPlayer(0, 0);
this.setSize(WidthFrame,HeightFrame);
this.addKeyListener(new KeyListener());
}
public void draw(Graphics g) {
Player.draw(g);
repaint();
}
/**
* @param args the command line arguments
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
draw(g);
}
@Override
public void run() {
while (true) {
Player.move();
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
Logger.getLogger(MyCarGame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
private class KeyListener extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
Player.xVel = 3;
break;
case KeyEvent.VK_LEFT:
Player.xVel = -3;
break;
case KeyEvent.VK_UP:
Player.yVel = -3;
break;
case KeyEvent.VK_DOWN:
Player.yVel = 3;
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_LEFT:
Player.xVel = 0;
break;
case KeyEvent.VK_UP:
case KeyEvent.VK_DOWN:
Player.yVel = -1;
break;
}
}
}
public static int WidthFrame = 0;
public static int HeightFrame = 0;
public static void main(String[] args) {
// TODO code application logic here
new GUI().setVisible(true);
}
}
Player类:
public class CarPlayer {
int x;
int y;
Image img;
public int xVel;
public int yVel;
public CarPlayer(int x,int y){
img= new ImageIcon("images/PlayerCar.png").getImage();
this.x=x;
this.y=y;
xVel=0;
yVel=-1;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void move(){
if(x+xVel<(MyCarGame.WidthFrame-50) && x+xVel>0)
x+=xVel;
if(y+yVel<(MyCarGame.HeightFrame-100) && y+yVel>0)
y+=yVel;
if(x<0){
xVel=0;
}
if(y<0){
yVel=0;
}
if(y>(MyCarGame.HeightFrame-100)){
yVel=0;
}
if(x>(MyCarGame.WidthFrame-50)){
xVel=0;
}
}
public void draw(Graphics g){
g.drawImage(img, x, y,50,100, null);
}
}
Frame类:
public class GUI extends javax.swing.JFrame {
/**
* Creates new form GUI
*/
MyCarGame g;
public GUI() {
this.setFocusable(false);
this.setResizable(false);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
MyCarGame.WidthFrame=this.getWidth();
MyCarGame.HeightFrame=this.getHeight();
g=new MyCarGame(this);
this.add(g);
g.setLocation(0, 0);
g.requestFocusInWindow();
Thread t= new Thread(g);
t.start();
}
}
1)为了更好地帮助越早,后期一个[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可验证示例)。 2)对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。 –
使用Swing'Timer'进行动画。 –
'WidthFrame'和'HeightFrame'是'0'?你能指望什么。不要为此使用'static'字段,传递'Player'需要知道的信息,即组件的实际大小... – MadProgrammer