2016-08-05 57 views
1

我有一個名爲Wave的遊戲的代碼,通常當我運行它時,它應該是一個帶有白色方塊的黑色窗口。但窗戶是白色的,窗戶左側有一條非常薄的黑色條紋。我幾乎看不到它。Java遊戲,顏色不會變爲

有沒有人知道爲什麼會發生這種情況?

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

回答

0

查看Canvas的API。在那裏,你會發現:

字段從接口java.awt.image.ImageObserver中
[...]高,[...],WIDTH

所以,既然你延長你的類繼承從Canvas類你已經有WIDTH和HEIGHT常量,由於某種原因WIDTH接縫有價值1
因此,只需重命名您的常量,它將按預期顯示。

+0

感謝您的幫助, 我還是不明白,我也添加了窗口類 –

+0

我覺得你的窗口類沒有問題。你是否在遊戲類中重新命名了WIDTH和HEIGHT值以及所有對它們的引用?你有沒有檢查他們的價值觀是否正確? – ArcticLord

+0

重命名它們,意思是小寫字母的寬度和高度,還是其他名稱? –