【发布时间】:2016-06-24 20:22:05
【问题描述】:
我不太擅长在 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
}
}
敌人等级 -
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);
}
}
【问题讨论】:
-
那么你的问题是什么?你说的这个错误在哪里?
-
但我确实看到了 OO 问题。为什么
Enemy扩展RTSMain?如果有的话,我认为RTSMain应该包含Enemy的集合,并在绘制它们时对其进行迭代。而spawnEnemy()应该只生成一个Enemy的实例,将它添加到Enemy集合中,它会在下次通过绘制循环绘制(我假设你正在使用游戏循环)。正是我注意到的,但您遇到的错误是什么? -
您的主要问题是缺少
super.paint(...)作为第一个。public void paint(Graphics g){里面的代码行,那么当前的绘画将被重置 -
mousePressed(MouseEvent e) {必须包含repaint()
标签: java swing class paint mouselistener