2016-04-24 3 views
0

Я пытаюсь создать программу, которая откроет новое окно, отобразит 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.Color; 
import java.awt.Graphics; 
import java.util.Random; 



public class Player extends GameObject { 

    Random r = new Random(); 

    public Player(int x, int y, ID id){ 
     super(x, y, id); 

     velX = r.nextInt(5) + 1; 
     velY = r.nextInt(5) + 1; 

    } 


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


    public void render(Graphics g){ 
     g.setColor(Color.white); 
     g.fillRect(x, y, 32, 32); 
    } 
} 

Handler класс

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); 
} 

} 
+0

Можете ли вы разместить свой класс * Handler *? –

+0

Я обновил свой код – hydregion

ответ

2

Хорошо, я понял, в методе рендеринга обработчика вы никогда не называете метод тика. Поэтому измените метод на:

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

Я тестировал его, и это сработало, это действительно действительно хорошая программа.

+0

Спасибо! Сейчас он работает – hydregion

0

Int метод клеща в классе игрока немного неправильно, он должен быть

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

+ = или - = добавляет/subtrac ting bytes.

+0

Я пробовал это, у меня все тот же результат:/спасибо за ввод: – hydregion

Смежные вопросы