Когда я запускаю свой код, в верхней части экрана должен появиться прямоугольник.Это мой код.
package game;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Game extends JFrame{
Shapes shapes = new Shapes();
static Long lastshapemake;
boolean running = true;
int count = 0;
String color;
public static int RotationIndex = 0;
Game(){
setSize(200, 400);
setTitle("Tetris");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
Runnable r = new IsKeyPressed();
Thread t = new Thread(r);
t.start();
Game game = new Game();
game.run(game);
}
public void run(Game game) {
shapes.newshape();
while(true) {
lastshapemake = System.nanoTime();
long lastTime = System.nanoTime();
double Target_FPS = 60.0;
double ns = 1000000000 / Target_FPS;
double delta = 0;
while(running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while(delta >= 1) {
tick();
game.repaint();
delta--;
}
}
}
}
public static void rotate() {
System.out.println('h');
RotationIndex++;
RotationIndex %= 4;
}
void tick() {
if(shapes.list.get(shapes.list.size() - 1).arr[RotationIndex][1] == 180){//if current shapes lowest rectangle(always the fourth) touches ground
lastshapemake = System.nanoTime();
shapes.newshape();
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
for(Rectangles emp: shapes.list) {
g.setColor(emp.color);
//Loop through all rectangle objects
//Loop through each objects array
for(int i = 0; i < 7; i += 2) {
g.drawRect(emp.arr[RotationIndex][i], emp.arr[RotationIndex][i + 1], 20, 20);
g.fillRect(emp.arr[RotationIndex][i], emp.arr[RotationIndex][i + 1], 20, 20);
}}
}
}
Ничего не отображается на экране, и я не знаю почему.Он работал до того, как я добавил super.paint (g) перед рисованием прямоугольников, но мне нужно вызвать super.paint (g), чтобы очистить прямоугольники перед рисованием новых.Я не знаю, нужно ли это исправлять, чтобы прямоугольники все еще очищались, а потом рисовались. Спасибо за любую помощь.