Почему ничто не обращается к JFrame? - PullRequest
0 голосов
/ 11 сентября 2018

Когда я запускаю свой код, в верхней части экрана должен появиться прямоугольник.Это мой код.

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), чтобы очистить прямоугольники перед рисованием новых.Я не знаю, нужно ли это исправлять, чтобы прямоугольники все еще очищались, а потом рисовались. Спасибо за любую помощь.

...