2016-08-05 1 views
1

Wave라는 게임에이 코드가 있습니다. 정상적으로 실행할 때 검정색 창이되고 검정색 창이됩니다. 창문은 흰색으로 창 왼쪽에 검은 색 줄무늬가 있습니다. 나는 간신히 그것을 볼 수있다.Java 게임, 색상이 apear가 아닙니다.

왜 이런 일이 일어날 지 아무도 모르는 사람이 있습니까?

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에
[...] HEIGHT, [...], 폭이 확장

그래서 이후 클래스에서 상속 Canvas 클래스에서 이미 WIDTH 및 HEIGHT 상수가 있고 어떤 이유로 WIDTH 이음새는 값이 1입니다.
상수의 이름을 바꾸면 예상대로 표시됩니다.

+0

도움을 주셔서 감사합니다, 나는 여전히 그것을 얻지 못합니다. Window 클래스도 추가했습니다. –

+0

윈도우 클래스에 문제가 없습니다. WIDTH 및 HEIGHT 값과 Game 클래스의 모든 참조를 바꾸셨습니까? 그리고 그 값이 정확한지 확인 했습니까? – ArcticLord

+0

이름을 바꾸면 소문자 글자의 너비와 높이 또는 다른 이름을 의미합니까? –