問題:
私は Java でスネーク ゲームを作成してきましたが、すべてがスムーズに動作しています。私が抱えている唯一の問題は、スコアの表示です。ヘビがリンゴを「食べる」たびに、スコアが 10 ずつ増えます。現在のスコアを表示する代わりに、現在のスコアを実際に消去せずに上書きするだけです。再表示する前にコンテンツを消去しようとすると、エラーが発生し、背景色以外は何も表示されません。
影響を与えたくない paint() など、他のグラフィックス コンポーネントがあります。
私の試み(理論的):
drawString("Current score: " + currScore, 0, (Constants.TOTAL_HEIGHT + 15));を呼び出す Graphics オブジェクトを使用してスコアを表示します。
clearRect() メソッドを呼び出す必要があると考えましたが、これは私には理にかなっています。残念ながら、clearRect() を指定する行で NullPointerException が発生します。
私はGraphics2Dを使用していないので、最初にGraphicsに慣れることができます。この問題の解決に Graphics2D が関係している場合、問題なく使用できます。
私の試み(問題の方法):
public void displayScore(Graphics g) {
//clearScore.clearRect(0, getY(), getWidth(), getHeight());
//g.clearRect(0, getY(), getWidth(), getHeight());
g.drawString("Current score: " + currHighScore, 0, (Constants.TOTAL_HEIGHT + 15));
}
コードでは、clearScore はメソッドの外側のクラスで宣言された Graphics オブジェクトです。これを使用する理由は、他のグラフィックに影響を与えないようにするためです。各 clearRect() 行を試してみましたが、どちらも同じ NullPointerException を生成したため、コメントアウトしました。(Constants.TOTAL_HEIGHT + 15) は、Y 座標の割り当てを担当します。
エラーメッセージ:
Exception in thread "Thread-3" java.lang.NullPointerException
at com.nmw.view.CanvasFrame.displayScore(CanvasFrame.java:149)
at com.nmw.view.CanvasFrame.drawAll(CanvasFrame.java:43)
at com.nmw.view.CanvasFrame.run(CanvasFrame.java:64)
at java.lang.Thread.run(Thread.java:722)
drawAll は、Graphics を使用してゲームのセグメントを描画するすべてのメソッドを呼び出す場所です。
長々と質問すみません=/