2017-01-21 14 views
0

私は単純な2Dゲームを開発しようとしていて、アニメーションのために私はTimerとTimerTaskを使っています。なぜそんなに遅くなるのですか?

しかし、24000×1600サイズと30MBのpngファイルである背景画像の再描画を呼び出すときだけ遅く描画されます。そして、私が他の再塗装をしたときは大丈夫でした。

私は大きすぎるイメージを描画するので、それですか?

私は24000 X 1600,130KB pngファイルで試しましたが、まだそれほど遅く描かれています。問題は何ですか?

ああ、また、コンテナ内にあるJPanelに描画しようとしています。

はここ

public void setIcon() { 
    try { 
     imgBackground = ImageIO.read(new File("./Images/Background/Background_1.png")); 
     imgBackground = convertToARGB(imgBackground); 
    } catch (Exception e) { 
     System.out.println(e.toString()); 
    } 
} 

public static BufferedImage convertToARGB(BufferedImage image) { 
    BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g = newImage.createGraphics(); 
    g.drawImage(image, 0, 0, null); 
    g.dispose(); 
    return newImage; 
} 

public void drawBackground() { 
    if (backgroundX >= -25900) { 
     buffg.drawImage(imgBackground, backgroundX, 0, null); 
     if (gameState) { 
      if (keyRight) { 
       backgroundX -= 3; 
      } else { 
       backgroundX -= 2; 
      } 
     } 
    } 
    if (background2X >= -25900) { 
     buffg.drawImage(imgBackground, background2X, 0, null); 
     if (gameState) { 
      if (keyRight) { 
       background2X -= 3; 
      } else { 
       background2X -= 2; 
      } 
     } 
    } 
    if ((backgroundX <= -22000) && (background2X <= -25900)) 
     background2X = fWidth; 
    if ((background2X <= -22000) && (backgroundX <= -25900)) 
     backgroundX = fWidth; 
} 

public void start(){ 
    Timer timer = new Timer(); 
    timer.schedule(timerTask, 50, 10); 
} 

TimerTask timerTask = new TimerTask() { 

    @Override 
    public void run() { 
     playerMoveProcess(); 
     getContentPane().repaint(); 
     getContentPane().revalidate(); 
    } 
}; 
+0

https://stackoverflow.com/help/mcveをお読みください。 –

答えて

0

あなたのイメージがhuuugeである私のコードです。 1ピクセルの描画に1ナノ秒かかるとします。次に、全体の画像を描画するのに38.4ミリ秒かかる。

イメージ全体が描画されるのではなく、実際に変更された部分に描画が制限されていることを確認してください。

最初に私が24000を見たとき、私はと思ったのですが、それはタイプがです。タイプミスでなければなりません。誰もこの大きな画像を生成せず、効率的に処理することを期待しています。

+0

ハハハ....それはタイプミスではありませんでした。私は実際に24000×1600サイズで試しています。しかし、私は2400X1400で試したので、私のコーディングは問題があると思うが、それはまた非常に遅く描かれた。 – AvrilLavigneLikesJava

関連する問題