0
我在学习如何用java创建一个游戏循环,并且每秒钟绘制一个新的屏幕一定的时间。游戏循环工作正常,但是当我尝试用repaint()调用paint方法时,paint方法不会被调用。 这里是我的代码:如何在游戏循环中使用repaint()方法
import javax.swing.JButton;
import javax.swing.JComponent;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.image.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class mainFrame extends Thread{
static boolean gameIsRunning = false;
MyCanvas2 myCanvas2 = new MyCanvas2();
static final int TARGET_FPS = 1;
static int x = 10;
static int y = 10;
static long startTime = 0;
static long elapsedTime = 0;
static long waitTime = 0;
public void createFrame(){
JFrame window = new JFrame("Out from Eden");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(30, 30, 700, 500);
window.setVisible(true);
gameIsRunning = true;
gameStart();
}
public void setGame(boolean game){
gameIsRunning = game;
}
public void gameStart(){
(new Thread(new mainFrame())).start();
}
public void run(){
while(gameIsRunning == true){
startTime = System.nanoTime();
myCanvas2.updateGame();
myCanvas2.renderGame();
elapsedTime = System.nanoTime() - startTime;
waitTime = (TARGET_FPS*10) - (elapsedTime/1000000);
if (waitTime < 0) {
waitTime = 5;
}
try {
Thread.sleep(waitTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class MyCanvas2 extends JPanel{
private static int x = 100;
private static int y = 100;
static int i =0;
public void updateGame(){
}
public void renderGame(){
repaint();
System.out.println("Hello");
}
public void paint(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.blue);
g2.drawString("Test", x,y);
System.out.println("Goodbye");
}
}
你好印了很多次,但再见不会被调用,这使我相信,油漆方法不会被调用。为什么重绘方法不会更新我的绘画方法?
我将MyCanvas2对象添加到窗口,但甚至没有被调用的方法有没有输出,我想知道为什么paint方法没有被调用。 – Priyank
那么,是不是因为我有太多的调用重新绘制的调用paint方法? – Priyank
对不起,我不明白,错误在哪里,它在绘制方法中?我应该叫超级?我只是试图让'再见'现在显示。 – Priyank