Java 让方块在屏幕上移动

Java 让方块在屏幕上移动,java,Java,我正在尝试创建一个程序,该程序将打开一个新窗口,显示50个正方形,并使它们在屏幕外以随机方向移动。这会渲染它们,但它们不会移动 package game; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferStrategy; import java.util.Random; public class Game extends Canvas

我正在尝试创建一个程序,该程序将打开一个新窗口,显示50个正方形,并使它们在屏幕外以随机方向移动。这会渲染它们,但它们不会移动

package game;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.Random;


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;

  private Random r;
  private Handler handler;

   public Game(){
       new Window(WIDTH, HEIGHT, "Test", this);

       handler = new Handler();
       r = new Random();

       for(int i = 0; i < 50; i++){
         handler.addObject(new Player(r.nextInt(WIDTH), r.nextInt(HEIGHT), ID.Player));  
       }


   }

   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 amountOfTicks = 60.0;
       double ns = 1000000000 / amountOfTicks;
       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 > 10000){
               timer += 10000;
               System.out.println("FPS: " + frames);
               frames = 0;
           }
       }
       stop();
   }

   private void tick(){
       handler.tick();
   }

   private void render(){
       BufferStrategy bs = this.getBufferStrategy();
       if(bs == null){
           this.createBufferStrategy(3);
           return;
       }

       Graphics g = bs.getDrawGraphics();
       while(1==1){
       g.setColor(Color.black);
       g.fillRect(0, 0, WIDTH, HEIGHT);

       handler.render(g);

       g.dispose();
       bs.show();
       }
   }

    public static void main(String args[]) {
       new Game();
    }




}
处理程序类

package game;

import java.awt.Graphics;
import java.util.LinkedList;

public class Handler {

LinkedList<GameObject> object = new LinkedList<GameObject>();

public void tick(){
    for(int i = 0; i < object.size(); i++){
        GameObject tempObject = object.get(i);

        tempObject.tick();
    }

}

public void render(Graphics g){
    for(int i = 0; i < object.size(); i++){
        GameObject tempObject = object.get(i);

        tempObject.render(g);
    }
}

public void addObject(GameObject object){
    this.object.add(object);
}

public void removeObject(GameObject object){
    this.object.remove(object);
}

}
打包游戏;
导入java.awt.Graphics;
导入java.util.LinkedList;
公共类处理程序{
LinkedList对象=新建LinkedList();
公共空白勾号(){
对于(int i=0;i
Int播放器类中的tick方法有点错误,应该是这样的

public void tick() {
x = x + velX;
y = y + velY;
}

+=或-=正在添加/减去字节。

Int播放器类中的tick方法稍有错误,应该是这样的

public void tick() {
x = x + velX;
y = y + velY;
}

+=或-=正在添加/减去字节。

好的,我发现,在handler render方法中,您永远不会调用tick方法。因此,将方法更改为:

public void render(Graphics g){
for(int i = 0; i < object.size(); i++){
    GameObject tempObject = object.get(i);
    tempObject.tick();
    tempObject.render(g);
}
}
public void渲染(图形g){
对于(int i=0;i

我测试了它,它成功了,它实际上是一个非常好的程序。

好的,我发现,在handler render方法中,你永远不会调用tick方法。因此,将方法更改为:

public void render(Graphics g){
for(int i = 0; i < object.size(); i++){
    GameObject tempObject = object.get(i);
    tempObject.tick();
    tempObject.render(g);
}
}
public void渲染(图形g){
对于(int i=0;i

我测试了它,它成功了,它实际上是一个非常好的程序。

你能发布你的处理程序类吗?你能发布你的处理程序类吗?我试过了,我仍然有相同的结果:/谢谢你的输入:)我试过了,我仍然有相同的结果:/谢谢你的输入:)