2016-08-05 53 views
1

Ich habe diesen Code für ein Spiel namens Wave, und normalerweise, wenn ich es ausführen, sollte es ein schwarzes Fenster mit weißen Quadraten drin sein. Aber das Fenster ist weiß, mit einem sehr dünnen schwarzen Streifen auf der linken Seite des Fensters. Ich kann es kaum sehen.Java-Spiel, Farben nicht apear

Hat jemand eine Idee, warum würde das passieren?

package wave.myFirstGame; 

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 = 3580879553502102315L; 
    public static final int WITDH = 640, HEIGHT = WITDH/12 * 9; 

    private Thread thread; 
    private boolean running = false; 

    private Random r; 
    public Handler handler; 

    public Game() { 
     new Window(WITDH, HEIGHT, "Wave", 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)); 
     } 

     handler.addObject(new Player(200, 200, ID.Player)); 
    } 

    public synchronized void start() {// initializing the thread 
     thread = new Thread(this); 
     thread.start(); 
     running = true; 
    } 

    public synchronized void stop() { 
     try { 
      thread.join(); 
      running = false; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    // GAME LOOP 
    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 > 1000) { 
       timer += 1000; 
       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(); 
     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(); 
    } 
} 

Antwort

0

Werfen Sie einen Blick in die API von Canvas. Dort finden Sie:

Felder aus Schnittstelle geerbt java.awt.image.ImageObserver
[...] Höhe [...], WIDTH

So, da Sie erweitern Ihre Klasse von Canvas Klasse haben Sie bereits WIDTH und HEIGHT Konstanten und aus irgendeinem Grund WIDTH Nähte haben Wert 1.
So einfach umbenennen Sie Ihre Konstanten und es wird wie erwartet angezeigt.

+0

Danke für die Hilfe, Ich bekomme es immer noch nicht, ich fügte die Window-Klasse zu –

+0

Keine Probleme mit Ihrem Fenster Klasse denke ich. Hast du deine WIDTH- und HEIGHT-Werte und alle Verweise darauf in deiner Spielklasse umbenannt? Und hast du überprüft, ob ihre Werte korrekt sind? – ArcticLord

+0

Umbenennen von ihnen, dh Kleinbuchstaben Breite und Höhe oder wirklich andere Namen? –