2014-11-27 2 views
0

Я в процессе создания простой двухмерной игры, однако у меня возникают проблемы с рисованием изображений. Ниже приведены несколько классов, которые имеют отношение к проблемеРисование изображения Java

private Vector<Bullet> ammo = new Vector<Bullet>(100); 

public class Bullet{ 
    Image img; 
    int x, y, speed; 
    boolean show; 
    Bullet(Image img,int x, int y, int speed, boolean show){ 
     this.x = x; 
     this.y = y; 
     this.speed = speed; 
     this.img = img; 
     this.show = show; 
    } 
    public void draw(ImageObserver obs) { 
     if(show) 
      g2.drawImage(img, this.x, this.y, obs); 
    } 
    public void update(){ 
     this.y -= 1; 
    } 
} 

public class Movement{ 
    .... 

    Movement(....){ 
     ..... 
    } 

    public void fly(){ 
     ...... 

     ammo.add(new Bullet(bullet1, m.x, m.y, 7, true)); 
    } 



public class MyPlane { 

    KeyControl key; 
    Movement flight; 
    Image img; 
    int x, y, speed, move = 0; 
    int boom; 
    ... 
} 


public void drawDemo() { 
    ...   
     for(Bullet bullets: ammo) 
      bullets.update(); 
    ... 
     for(Bullet bullets: ammo) 
      bullets.draw(this); 
    } 
} 

Когда я называю bullets.draw (это) ничего на самом деле не рисуется на экране. Однако я знаю, что вектор боеприпасов содержит правильную информацию, такую ​​как координата x, координата y ... Между прочим, я использую Graphics 2-D. Любая помощь и/или предложения были бы весьма благодарны.

public void paint(Graphics g) { 
    if(bimg == null) { 
     Dimension windowSize = getSize(); 
     bimg = (BufferedImage) createImage(windowSize.width, 
       windowSize.height); 
     g2 = bimg.createGraphics(); 
    } 
    drawDemo(); 
    g.drawImage(bimg, 0, 0, this); 
} 
+2

Где находится ссылка 'g2'? – MadProgrammer

+0

добавил его в нижней части сообщения – leebochang

+1

Не лучший выбор, вы должны передать его классу «paint». Кроме того, почему вы переопределяете краску и реализуете свой собственный двойной буфер? Почему вы не называете 'super.paint'? Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

ответ

0

Я думаю, что вы должны сделать образ как это:

public void draw(Graphics g2) { 
    if(show) 
     g2.drawImage(img, this.x, this.y, null); 
} 

Затем в плоскости класса вы должны добавить Graphics в качестве аргумента метода drawDemo():

public void drawDemo(Graphics g2) { 
...   
    for(Bullet bullets: ammo) 
     bullets.update(); 
... 
    for(Bullet bullets: ammo) 
     bullets.draw(g2); 
} 

и, наконец, в вас краска (графика g) метод, вы называете это:

public void paint(Graphics g) { 
    /* 
     ... 
    */ 
    drawDemo(g2); 
    g.drawImage(bimg, 0, 0, this); 
}