【问题标题】:Java drawimage in gameloop游戏循环中的Java drawimage
【发布时间】:2013-07-17 14:08:57
【问题描述】:

我正在努力学习编写我的第一个游戏,我想正确理解我所做的每一步。稍后我将面临双重缓冲和其他事情。 我只是想在游戏循环中加载图像。 我有两节课。第一个它只是一个调用 start 方法的 jframe。 我想知道这里是否有一些丑陋的代码(我想是的)。 那么,为什么我的图片没有显示?

public class myPanel extends JPanel implements Runnable{

//FIELDS
public static int WIDTH = 1024;
public static int HEIGHT = WIDTH / 16 * 9;
private BufferedImage bg;
private BufferedImage charac;
private boolean running;
private Thread t1;
private int startposX = WIDTH / 2;
private int startposY = HEIGHT / 2;
private int cordX = startposX;
private int cordY = startposY;
int speed = 50;


//METHODS   
public synchronized void start (){
    running = true;
    t1 = new Thread (this);
    t1.start();
}

public synchronized void stop (){
    running  = false;
    try {
        t1.join();
        System.out.println("The game stopped");
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
              }
 }

 //INIT
 public myPanel(){

   setPreferredSize(new Dimension(WIDTH, HEIGHT));
   setFocusable(true);
   requestFocus();
   addKeyListener(this);
 }

 //MAIN RUN METHOD

 public void run(){
           while (running){
           load();
           System.out.println("The game runs");
           repaint();
          }
 }


  //PAINT WITH GRAPHICS METHOD
  public void paint (Graphics g){
    super.paint(g);
    g.drawImage(bg, 0, 0, this);
    g.drawImage(charac, 110, 280, this);

}

//LOAD IMAGES IN MEMORY
public void load (){
            try {
        String path1 = "res/bg.png";
        bg = ImageIO.read(new File (path1));
        String path2 = "res/charac.png";
        charac = ImageIO.read(new File (path2));
    } catch (IOException e) {

        e.printStackTrace();
    }

}

【问题讨论】:

  • 一些提示,一开始不要考虑线程或多线程,尤其是新手。此外,您一直在重新加载图像(每次在循环中它都会再次加载图像),您只需执行一次。也可以试试 drawImage(bg,0,0,null)。你也不应该覆盖paint而是paintcomponent,在这里快速搜索会告诉你原因。您是否已将此 JPanel 添加到 JFrame 并将 JFrame 设置为可见?

标签: java loops graphics paint repaint


【解决方案1】:

所以,我做了一些关于paint vs paintcomponent 的测试,我刚刚看到第一个绘制在jpanel 背景之上。无论如何,我仍然看不到任何将线条更改为

    public void run(){
    while (running){
    load();
    System.out.println("The game runs");

    }
}



    //PAINT WITH GRAPHICS METHOD

    public void paintComponent (Graphics g){
    super.paint(g);
    g.drawImage(bg, 0, 0, null);
    g.drawImage(charac, 110, 280, null);
    }
//LOAD IMAGES METHOD AS ABOVE

是的,我已将面板添加到框架中,这是另一个类

公开课游戏{

public static void main (String [] args){

JFrame frame = new JFrame();
frame.setIgnoreRepaint(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new myPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

myPanel game = new myPanel();
game.start();

}

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多