Java 在游戏中显示图片和使用int有问题
我正在学习如何编程,我了解我正在做的大部分事情,但我最近陷入困境,无法解决这个问题。首先,我想在JFrame上显示一张图片,然后我想看看我的程序是否检测到鼠标移动,我只需在frameupdater中打印当前的x和y坐标即可: 核心类:Java 在游戏中显示图片和使用int有问题,java,Java,我正在学习如何编程,我了解我正在做的大部分事情,但我最近陷入困境,无法解决这个问题。首先,我想在JFrame上显示一张图片,然后我想看看我的程序是否检测到鼠标移动,我只需在frameupdater中打印当前的x和y坐标即可: 核心类: package B0ss; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.MouseInfo; import java.awt.RenderingHints; impo
package B0ss;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class B0ssCore extends JPanel implements KeyListener, MouseListener {
//Subclasses
MainMenu mainMenu = new MainMenu();
public void updateMainMenu() throws InterruptedException {
while (true) {
repaint();
mainMenu.drawMainMenu(getWidth(), getHeight());
System.out.println(mouse_X, mouse_Y);
Thread.sleep(20);
}
}
//Keyboard
public void keyPressed( KeyEvent e) { }
public void keyReleased ( KeyEvent e) { }
public void keyTyped ( KeyEvent e ) { }
//Mouse
public void mousePressed ( MouseEvent e ) {
int mouse_Y = MouseInfo.getPointerInfo().getLocation().y;
int mouse_X = MouseInfo.getPointerInfo().getLocation().x;
}
public void mouseReleased ( MouseEvent e ) { }
public void mouseClicked ( MouseEvent e ) { }
public void mouseEntered ( MouseEvent e ) { }
public void mouseExited ( MouseEvent e ) { }
//Paint
@Override
public void paint ( Graphics g ) {
super.paint(g);
Graphics2D g2D = (Graphics2D) g;
g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
mainMenu.paint(g2D);
}
public static void main(String args[]) throws InterruptedException {
JFrame frame = new JFrame("Ba0ssGame");
B0ssCore gameCore = new B0ssCore();
gameCore.setSize(frame.getWidth(), frame.getHeight());
frame.add(gameCore);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
gameCore.updateMainMenu();
}
}
我的主菜单的子类:
package B0ss;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
public class MainMenu {
public void drawMainMenu( int width, int height) {
}
public void paint ( Graphics2D g2D ) {
Image smiley = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Shimolis\\Desktop");
g2D.drawImage(smiley, 0, 0, 50, 50, 0, 0, smiley.getWidth(null), smiley.getHeight(null), null);
g2D.fillRect(50, 50, 100, 100);
}
}
并不是我想让你修改我的代码。我想了解为什么我的updateMainMenu()中的ints mouse_x和mouse_y出现错误。我还研究了不同的显示图片的方法,但这太令人困惑了,因为我不明白imageObserver是什么,我试过阅读它,但我就是不明白。所以我试着把它设为空,这是个问题吗
谢谢你的帮助
编辑:我犯了一个很严重的错误(我没有完成图片的路径),很抱歉这篇文章。我意识到了图片的问题,但是鼠标x和鼠标y的问题仍然存在。您的代码中有几个问题。只要简单看一下您的代码,我就可以说您的
mouse\u x
和mouse\u y
是MouseEvent e
方法的本地对象,请在该方法之外声明它们,以便您可以在updateMainMenu()
方法中使用它们
另一件事是您正在实现侦听器
,而没有实际使用它们,您分配给鼠标x
和鼠标y
的值是屏幕坐标,与JPanel
无关
将构造函数
添加到B0ssCore
类中,并添加您实现的侦听器
,例如:
public B0ssCore(){
super();
addMouseListener(this);
}
public void mousePressed ( MouseEvent e ) {
// don't forget to declare mouse_x and mouse_y at the class level
mouse_Y = e.getX(); // relative to container coordinates
mouse_X = e.getX();
}
并将public void mousePressed(MouseEvent e)
更改为类似以下内容:
public B0ssCore(){
super();
addMouseListener(this);
}
public void mousePressed ( MouseEvent e ) {
// don't forget to declare mouse_x and mouse_y at the class level
mouse_Y = e.getX(); // relative to container coordinates
mouse_X = e.getX();
}
代码中还有其他问题。例如:
while (true) {
repaint();
mainMenu.drawMainMenu(getWidth(), getHeight());
System.out.println(mouse_X, mouse_Y);
Thread.sleep(20);
}
看起来可疑。在你的代码中有很多事情可以做得更好,但我想这就是你学习好运的原因。这对我帮助很大,谢谢!但我不应该在镜框里加上鼠标听筒吗?至少对于我的keyListener,因为我需要将我的程序焦点设置为框架,这与鼠标侦听器类似吗?你可以,但根据你的代码判断,你对输入的所有操作都是在
JPanel
中完成的,所以不,不要将侦听器添加到JFrame
中,只需调用requestFocus()在B0ssCore
构造函数中的code>来触发KeyListener
。@Joseph MouseListener通常不像KeyListener那样挑剔,但你应该使用键绑定,而不是你应该按照程序员的建议去做。