Я в процессе создания простой двухмерной игры, однако у меня возникают проблемы с рисованием изображений. Ниже приведены несколько классов, которые имеют отношение к проблемеРисование изображения 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);
}
Где находится ссылка 'g2'? – MadProgrammer
добавил его в нижней части сообщения – leebochang
Не лучший выбор, вы должны передать его классу «paint». Кроме того, почему вы переопределяете краску и реализуете свой собственный двойной буфер? Почему вы не называете 'super.paint'? Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer