2016-05-01 6 views
0

私は2つのモードを持つゲームを持っています:時間が限られており、在庫が限られています(スマッシュブラザーズのようなものです)。私のゲームのループでは、renderGame()というメソッドが呼び出され、動くオブジェクトが座標を表示してからrepaint()を呼び出します。不要なチェックを避ける

@Override 
public synchronized void paint(Graphics g) { 
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g; 

//Background Image 
    g2d.drawImage(displayBackground, 0, 0, null); 

//Stage Image 
    g2d.drawImage(displayMap, 0, 0, null); 

//Players Images 
    for(Player p: players){ 
     if(p.getPlayerNumber() == 1) 
     g2d.drawImage(displayMario, p1XDisplayCoord, p1YDisplayCoord, null); 
     else 
     g2d.drawImage(displayLuigi, p2XDisplayCoord, p2YDisplayCoord, null); 
    } 

//Not implemented yet 
    drawHUD(g2d); 

    g2d.dispose(); 
} 

私の質問は:drawHUD()メソッドは、その状態を定義する条件のために、私は呼び出すたびにテストすることなく、試合中の現在の進行に基づいて異なるものを描きますように、どのように私はそれを作ることができます私のゲームのループでrenderGame()?鉄道のスイッチのようなもの。

例:スタートアップ中に「準備完了」のシーケンスを、ゲームプレイ中にプレーヤのステータスを表示する必要があります。一致が終了すると、マッチした勝者を示す必要があります。ゲームの種類にも依存する必要があります。例:在庫の一致時に増加するタイマーを表示しますが、時間指定された一致の場合は減少します。

+1

特定の実装に必要な機能を単に描画する「描画」メソッドを持つ異なるクラスを提供できます。次に、必要に応じて使用するインスタンスを変更することができます – MadProgrammer

+0

@MadProgrammerそのようにしましたが、私は新しいクラスを伴わない低レベルのソリューションを見つけようとしていました。 – hjl

+0

次に、何らかの種類の状態チェックを行う必要があります。P – MadProgrammer

答えて

1

ビッグ問題:あなたは、塗料をオーバーライドして、まだsuper.paintComponentを呼んでいる

  • - 行うには非常に危険なものです。代わりにpaintComponentを呼び出して、同じsuperのメソッドを呼び出します。
  • あなたはJVMから与えられたGraphicsオブジェクトを処分しています。それは、グラフィックスチェーンを完全に破壊するので非常に危険です。これをしないで、自分で作成したGraphicsオブジェクトを破棄してください。
  • スイングはシングルスレッドなので、paintまたはpaintComponentを同期させる理由はありません。

日時:

私の質問は:drawHUD()メソッドは、その条件をテストすることなく、試合中の現在の進行に基づいて異なるものを描きますように、どのように私はそれを作ることができますゲームのループでrenderGame()を呼び出すたびにその状態を定義しますか?鉄道のスイッチのようなもの。

ほとんどの状態チェックは高価ではありませんが、もしあれば、状態が変化した場合に設定される何らかのブールスイッチを使用することができます。

+0

これらの問題を指摘してくれてありがとう - 私はちょうどグラフィックスになっています。しかし、あなたの答えを明確にするために、私はある種のテストを避けることができません。 – hjl

+0

あなたはまた、異なる状態をレンダリングする異なるクラスを(共通のインターフェースまたはクラスから)持つことができます。アイデア+1以外ではありません。 – MadProgrammer

+0

@hjl *何らかの形で*決定する必要があります。彼が言っていることは、それらのテストが絵画そのものよりもはるかに速いため、最適化するものは何もないということです。必要のないものを最適化しないでください。 +++遅い​​場合(尺度!)、時々(例えば10ペイントごとに)そのようなチェックを行い、その結果を保存することができます。または、ゲームが始まるなど、イベントが発生したときに結果を保存する。 – maaartinus

関連する問題