【发布时间】:2022-06-29 12:12:24
【问题描述】:
我对在 java 中使用 JFrames 和 Graphics 很陌生。我的长期目标是创建一个 RayCast 游戏世界。以下代码是我在 jframe 中在其坐标处移动矩形的第一种方法。当用户按下箭头键时,坐标会发生变化。但是似乎有些问题,因为当我使用程序时,矩形只是被绘制并创建了一条路径。我希望在坐标位置绘制矩形。
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
public class Raycast_World_2 extends JFrame implements ActionListener, KeyListener, Runnable
{
public int px,py;
int velx = 0, vely = 0;
Graphics f;
public Raycast_World_2()
{
// Instanzvariable initialisieren
px = 100;
py = 100;
setSize(1280,960);
setVisible(true);
setDefaultCloseOperation(3);
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
setTitle("Raycast_World-Try4_Version 3.0");
JMenuBar menuBar = new JMenuBar();
JMenu menuFile = new JMenu("File");
JMenuItem menuItemExit = new JMenuItem("Exit");
menuFile.add(menuItemExit);
menuBar.add(menuFile);
// adds menu bar to the frame
setJMenuBar(menuBar);
}
public void actionPerformed(ActionEvent e){
update(getGraphics());
repaint();
}
public void paint(java.awt.Graphics g) {
g.setColor(Color.red);
g.fillRect(px,py,20,20);
g.dispose();
repaint();
}
public void run(){
}
public void keyPressed(KeyEvent e){
int c = e.getKeyCode();
if(c == KeyEvent.VK_LEFT){
px = px-10;
}
if(c == KeyEvent.VK_UP){
py = py -10;
}
if(c == KeyEvent.VK_RIGHT){
px = px +10;
}
if(c == KeyEvent.VK_DOWN){
py = py +10;
}
}
public void keyTyped(KeyEvent e){
}
public void keyReleased(KeyEvent e){}
}
请解释一下我做错了什么。 提前感谢您帮助我!
【问题讨论】:
-
您不得对传递给绘制方法的 Graphics 对象调用
dispose()。 Graphics 对象属于系统。除非您创建了任何 Graphics 对象,否则不要丢弃它。
标签: java swing jframe graphics2d