#java
#java
Вопрос:
Я запустил игру, но с ней что-то не так. На самом деле это ничего не показывает и не выдает мне ошибку. Он просто запускает ее и больше ничего не делает.
Вот мои коды:
КЛАСС
package Game;
import java.awt.Canvas;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Window extends Canvas{
private static final long serialVersionUID = -2408406005333728354L;
public Window(int height, int width, String title, Game game){
JFrame tit = new JFrame(title);
tit.setPreferredSize(new Dimension(width, height));
tit.setMaximumSize(new Dimension(width, height));
tit.setMinimumSize(new Dimension(width, height));
tit.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //It make the game close up to the end without bugs
tit.setResizable(false); //not able to resize
tit.setLocationRelativeTo(null); //put the frame in the middle of the screen, originaly it starts up left
tit.add(game); // adding pur game class to the frame
tit.setVisible(true); //to make it visible
game.start(); // makes the game start
}
}
Вот ОСНОВНЫЕ
package Game;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
public class Game extends Canvas implements Runnable{
private static final long serialVersionUID
= 1550691097823471818L;
public static final int WIDTH = 640, HEIGHT = WIDTH / 12*9;
private Thread thread;
private boolean running = false;
public Game(){
new Window(WIDTH, HEIGHT, "TITLE OF THAE GAME", this);
}
public synchronized void start(){
thread = new Thread(this);
thread.start();
running = true;
}
public synchronized void stop(){
try{
thread.join();
running = false;
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
long lastTime = System.nanoTime();
double amoutOfTicks = 60.0;
double ns = 1000000000.0/amoutOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0;
while(running){
long now = System.nanoTime();
delta = (now-lastTime) / ns;
lastTime = now;
while (delta>=1){
tick();
delta--;
}
if(running)
render();
frames ;
if(System.currentTimeMillis() - timer > 1000){
timer = 1000;
System.out.println("FPS: " frames);
frames = 0;
}
}
stop();
}
private void tick(){
}
private void render(){
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.dispose();
bs.show();
}
public static void main(String[] args){
}
}
На самом деле есть кое-что, чего я не понимаю, и это serialVersionUID
. Я не знаю, что это за материал. Я просто скопировал его из этого источника: https://www.youtube.com/watch?v=1gir2R7G9wsamp;index=4amp;list=PL3j6S0UUuVMRSD1_wCzr2-Yd8h48rUvhsamp;t=647s
Это также источник, который я использую для создания этих кодов (скопированных).
Спасибо, что уделили мне время.
Комментарии:
1. Ваш
main
метод пуст. Это то, что запускается при запуске программы. Если там ничего нет, то ваша программа просто завершит работу, как только запустится.2. новая игра (); это все, что вам нужно в основном.
Ответ №1:
Вы ничего не пишете в своем основном методе, поэтому программа ничего не делает.вы должны создать объект Game и объект Window , а затем вызвать метод window в основном методе.
Комментарии:
1. Подумайте о том, чтобы добавить к вашему ответу действительный main.
2. Хорошо, эта проблема решена, но теперь у меня есть еще 2 проблемы.
3. Извините, слишком рано нажал Enter. Итак, первая проблема заключается в том, что в строке с надписью private Thread thread; выдает ошибку в приватном слове. Во-вторых, когда я запускаю его, он говорит, что в строке есть проблема:public static void main(String args[]){ new Game(); }} . Я добавил новую Game();, но это выдает мне ошибку в строке public static void main(String args [])