简单的Java游戏只画了一半窗口

时间:2014-05-09 20:10:51

标签: java jframe jpanel

我无法弄清楚为什么游戏只在我制作的窗口的一半上绘制。 我添加了actionPerformed以始终实现到y位置,它只在窗口的一半上,然后图像停止。

主要

import java.awt.EventQueue;
import javax.swing.JFrame;

public class Main extends JFrame{

public static void main(String[]args){
    EventQueue.invokeLater(new Runnable() {

        public void run() {
            JFrame ex = new Main();
            ex.setVisible(true);


        }
    });
}

public Main(){

    setTitle("Maze");
    add(new Game());
    pack();
    setResizable(false);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

}

游戏

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Game extends JPanel implements ActionListener {


private final int GWIDTH = 400;
private final int GHEIGHT = 400;
private int GAME_DELAY = 10;

private Timer timer;

private Image player;

/*Player*/
private final int spawnPosition = 0;
int playerX = 0;
int playerY = spawnPosition;

/*Mouse*/
private Mouse m;

public Game(){
    setFocusable(true);
    setPreferredSize(new Dimension(GWIDTH, GHEIGHT));

    addMouseListener(new Mouse());
    initTime();
    //Importam poza
    loadPlayer();
    //Mouse
    m = new Mouse();
}

private void initTime(){
    timer = new Timer(GAME_DELAY, this);
    timer.start();
}

private void loadPlayer(){
    ImageIcon img = new ImageIcon("smiley.png");
    player = img.getImage();
}

public int getX(){ return playerX; }
public int getY() { return playerY; }

private void drawPlayer(Graphics2D g2d){
    g2d.drawImage(player,getX(),getY(),null);
    Toolkit.getDefaultToolkit().sync();
}

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    drawPlayer(g2d);
    g2d.dispose();

}


public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

    playerY += 1;
    repaint();
}

 }

图片

enter image description here

0 个答案:

没有答案