[英]How to draw an image over another?
所以我正在为一个班级做一个项目。 我一直在努力解决这个问题。 下面的代码是一个开始屏幕,按下回车键(当atTitle
变为false时),我希望它绘制下一张图像。 这样做的问题是,当它变成false时,我想不出办法绘制下一张图像。 我试过使用ifs和whiles。 主要的问题是,您显然在if语句中放置了另一个public void paintComponent
。 而且我无法将Graphics g
变量携带到KeyPressed
方法中。 我被卡住了。
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
AffineTransform at = new AffineTransform();
g2.setTransform(at);
if (atTitle == true) {
g.drawImage(titlescreen, 0, 0, this);
if (start_visible == true) {
g.drawImage(start_symbol, -70, 30, this);
jf.addKeyListener(this);
}
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
//int keyCode = e.getKeyCode();
if (atTitle == true) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
atTitle = false;
System.out.println("It Works.");
}
}
}
如果使用的是JPanel,则应:
panel.setFocusable(true);
panel.requestFocusInWindow();
您也可以在按键中调用panel.revalidate()和/或panel.repaint()。
也许尝试完全远离JPanel和Swing(不适合游戏,但适合表单),而仅将Graphics2D功能与Window,Frame和Canvas一起使用,如先前评论中所建议。
您需要调用repaint
并等待系统调用来paint
函数。 您不应该保留graphic
对象并将其用于功能不是paint
子功能
作为一个简单的画布组件,您可以使用此组件
class Game extends Canvas implements Runnable {
private Thread thread;
public Game(){
thread = new Thread(this);
thread.start();
}
@Override
public void paint(Graphics g) {
// paint your game
}
public void stop(){
thread = null;
}
@Override
public void run() {
while (thread == Thread.currentThread()){
long ti = System.currentTimeMillis();
repaint();
long ti2 = System.currentTimeMillis();
long waitTime = 60 - (ti2-ti);
if (waitTime > 0){
try {
Thread.sleep(waitTime);
} catch (Exception e){
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.