2013-05-21 50 views
0

我正在製作一個(目前相當簡單)的自上而下的Java 2D遊戲,並且在實現縮放時遇到了問題。縮放圖形導致遊戲停止渲染

似乎我可以縮放的唯一方法是通過減少寬度和高度,並將相乘的版本提供給setPreferredSize()。我希望在渲染時使用AffineTransform來縮放我的Graphics2D,但包括g2d.setTransform(transformer);這一行會將所有渲染爲空圖塊。

沒有: enter image description here 有了: enter image description here

我也試過餵我的類來處理瓦/畫面渲染乘以升/分頻值的寬度和高度,以完全相同的結果。有任何想法嗎?

這裏是我的渲染方法:

bs = getBufferStrategy(); 
    if (bs == null) { 
     createBufferStrategy(3); // woo, triple buffering! 
     return; 
    } 

    transformer.scale(scale, scale); 

    // other stuff here . . . 

    // draw screen.pixels to pixels 
    for (int i = 0; i < pixels.length; i++) { 
     pixels[i] = screen.pixels[i]; 
    } 

    // draw 
    g2d = (Graphics2D)bs.getDrawGraphics(); 
    g2d.setTransform(transformer); 
    { 
     g2d.drawImage(image, 0, 0, width, height, null); 
     /* g.setColor(Color.WHITE); 
     * g.setFont(new Font("Veranda", 0, 50)); 
     * g.drawString("B: " + Mouse.b(), 80, 80); 
     */ 
    } 
    g2d.dispose(); 

    bs.show(); // blit/show buffer 

    Toolkit.getDefaultToolkit().sync(); 

我使用的Eclipse IDE和Java1.6沒有預先做好的遊戲引擎。我正在渲染到JFrame中的Canvas上。

+0

我記得,縮放轉換也會縮放位置點 – MadProgrammer

+0

有沒有這樣做的縮放標準化方法?或者我是否需要通過手工反擊? – gossfunkel

+1

關閉我的頭頂,沒有。您可以嘗試使用'AffineTransformation#setToTranslation'來轉換圖形原始文件 – MadProgrammer

回答

0

我想借此在Slick2d http://www.slick2d.org/

它有自己的圖像類,它處理重新調整圖片的方式是很容易的工作。

+0

在這一點上,我並不太熱衷於轉向現有的引擎。當然,我的遊戲遠沒有完成,但我的引擎有點太混亂了,很容易改變。 – gossfunkel

+0

經過反思,我想我將不得不做很多重寫,所以我可能會使用浮油。不幸的是,該網站已關閉。其他任何地方我都可以獲得很好的資源? – gossfunkel

+0

[這裏](http://www.mediafire.com/?f455iu0bh14imbi)是一個設置和準備使用的例子。這已經包括你需要的庫。儘管如此,你將不得不改變本地庫的位置,以滿足你的工作路徑。右鍵點擊你的項目文件夾「構建路徑 - >配置構建路徑」,然後進入庫選項卡,並下拉lwjgl.jar上的箭頭,並將本機庫位置設置爲操作系統的文件夾。 –