Я не очень хорошо разбираюсь в нескольких классах в java, так как мне всегда было проще выполнять весь мой код в 1 классе. Недавно я нашел необходимость использовать второй класс для игры, которую я делаю, и я столкнулся с ошибкой.Картина в нескольких классах
Прямо сейчас я просто пытаюсь вызвать врага там, где и когда пользователь нажимает.
Главный класс -
package joey.rts;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class RTSMain extends JFrame implements MouseListener{
/**
*
*/
private static final long serialVersionUID = -7122370886923000314L;
public static BufferedImage menu,enemy;
public static boolean onmenu,oneenemy;
public static void main(String[] args){
new RTSMain();
}
public RTSMain(){
init();
}
public void init(){
setSize(1700,1100);
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("RTS");
addMouseListener(this);
}
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g;
if(onmenu == true){
g2.drawImage(menu,0,0,this);
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
Enemy enemy = new Enemy();
int x = e.getX();
int y = e.getY();
enemy.spawnEnemy(x, y);
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
Enemy класс -
package joey.rts;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Enemy{
/**
*
*/
public static BufferedImage enemy;
private static final long serialVersionUID = 7898827977636314494L;
public static RTSMain rts;
public static void main(String[] args){
try{
enemy = ImageIO.read(new File(javax.swing.filechooser.FileSystemView.getFileSystemView().getHomeDirectory() + "\\enemy.png"));
} catch (Exception e){
e.printStackTrace();
}
}
public static void spawnEnemy(int x, int y){
Graphics g = rts.getGraphics();
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(enemy,x,y,null);
}
}
Так в чем ваш вопрос? Где эта ошибка вы говорили? – Frecklefoot
Но я вижу проблему OO. Почему «Enemy» расширяет «RTSMain»? Во всяком случае, я думаю, что 'RTSMain' должен содержать коллекцию« Enemy »и просто перебирать их при их рисовании. И 'spawnEnemy()' должен просто вызвать экземпляр «Enemy», добавить его в коллекцию «Enemy», и он будет нарисован в следующий раз через цикл рисования (я предполагаю, что вы используете игровой цикл). Только то, что я заметил, но какова ошибка, с которой вы сталкиваетесь? – Frecklefoot
вам не хватает 'super.paint (...)' в качестве первой. строка кода внутри 'public void paint (Graphics g) {', тогда текущая картина будет сброшена – mKorbel