2016-06-16 12 views
0

単純なゲームエンジンのチュートリアルに従っています。何らかの理由で、長方形を塗りつぶすときにsetColorが機能しません。私はちょうど空白の白い画面を取得します。私は他の同様の記事を見てきましたが、誰も私を助けてくれないようでした。ここでは、コードです:ELDOによって示唆されるようにsetColor Javaが動作しない

package com.binaryscythe.SA.main; 

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

/** 
* @author 4nd3r 
* 
*/ 
public class Game extends Canvas implements Runnable { 
    private static final long serialVersionUID = -3472639816592189040L; 

    public static final int WIDTH = 1920, HEIGHT = WIDTH/16 * 9; 
    private Thread thread; 
    private boolean running = false; 

    private Handler handler; 

    public Game() { 
     new Window(WIDTH, HEIGHT, "Senum's Adventure", this); 
     handler = new Handler(); 
    } 

    public synchronized void start() { 
     thread = new Thread(this); 
     thread.start(); 
    } 

    public synchronized void stop() { 
     try { 

     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void run() { 
     long lastTime = System.nanoTime(); 
     double amountOfTicks = 60.0; 
     double ns = 100000000/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(); 
    } 
} 
+1

Graphicsをキャスト:

そうでなければ、あなたも次のコードスニペットを試すことができます!あなたのプログラムはどのように実行されますか? –

+0

@ Jossie Calderon彼のウィンドウクラスにはいくつのパラメータがあるのですか? – eldo

+0

は、ウィンドウとハンドラのクラスはコモド自身によって作成されます。彼のコードをテストするには、 'awt.Frame'を使い、GUIを準備した後、' Cantを拡張する 'Gameクラスを' awt.Frame'に追加し、 'paint'メソッドで描画します。 – rupinderjeet

答えて

1

、私の知る限り見ることができるように

、あなたのrunning変数trueを設定することはありません。あなたのフレームは現れますが、あなたのゲームループはあなたのrenderメソッドに実際には届きません。 start方法でrunning = true;にお試しください。

ブール変数runningを確認してください。このような場合は、回答を受け入れたものとしてマークしてください。ウィンドウは、これら4つの引数を取りませんので、ウィンドウを作成することはできませんpaint方法によって をしてGraphics2D

@Override 
    public void paint (Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 

    g2.setColor(Color.blue); 
    g2.fillRect(50, 50, 300, 300); 

    } 
+0

@eldoとrupinderjeet47皆さんありがとう!それだった!愚かなチュートリアルはそのsmhを決して説明しなかった。 – 4nd3r

+0

うわー、この愚かなコミュニティには、正しい答えをdownvoteに感謝します。 – eldo

関連する問題