Мне было интересно, существует ли такая функция, как void draw()
, которая Обработка использует язык программирования, который вызывается в каждом кадре. Или даже просто функция, которая выполняет бесконечный цикл при вызове, но выполняет ее только каждый раз, когда появляется новый кадр. Я слышал о чем-то, что называется runnable в java, как мне это использовать? также есть ли лучший способ, чем иметь исполняемый файл с задержкой, такой как функция, которая жестко закодирована для запуска каждого кадра. О, а также, что такое вызов функции, который позволит мне увидеть, сколько времени (предпочтительно в миллисекундах) с тех пор, как приложение начало работать таким образом, я могу сделать мои вызовы runnables/frame намного более точными, чтобы игра работала примерно с той же скоростью на каждом компьютере независимо от частоты кадров.
Функция Java, которая вызывается в каждом кадре
Ответы (1)
Возможно, вам нужно что-то вроде этого
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
public class Repainter extends JPanel {
private Point topLeft;
private int increamentX = 5;
public Repainter() {
topLeft = new Point(100, 100);
}
public void move() {
topLeft.x += increamentX;
if (topLeft.x >= 200 || topLeft.x <= 100) {
increamentX = -increamentX;
}
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(topLeft.x, topLeft.y, 100, 100);
}
public void startAnimation() {
SwingWorker<Object, Object> sw = new SwingWorker<Object, Object>() {
@Override
protected Object doInBackground() throws Exception {
while (true) {
move();
Thread.sleep(100);
}
}
};
sw.execute();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Repaint Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
Repainter repainter = new Repainter();
frame.add(repainter);
repainter.startAnimation();
frame.setVisible(true);
}
});
}
}
person
Mohayemin
schedule
16.07.2012
frame
Вы говорите о графическом окне? - person Mohayemin   schedule 16.07.2012