2014-03-24 52 views
0

所以我想知道如何運行多維數組而不必使用循環來測試對象是否在矩形中相交然後渲染有趣的?Java渲染僅相交?

目前我使用兩個for循環來通過它,並在嵌套循環內我必須使用intersecting()方法,因爲這需要發生每一幀我的遊戲正在變得低FPS。我認爲這是因爲我的陣列中有650x350個實體。我將在下面顯示代碼並重申問題。所以我的官方問題是如何測試一個實體是否與我的矩形攝像頭相交,以便它不會延遲遊戲?

for (int x = 0; x < entities.length; x++) // entities.length is 650 
{ 
    for (int y = 0; y < entities[0].length; y++) // entities[0].length is 350 
    { 
     if (camera.intersecting(entities[x][y])) 
     { 
     entities[x][y].render(g); // X and Y indices are multiplied by 32 to get the position 
     } 
    } 
} 
+0

你可以檢查出http://stackoverflow.com/questions/13270491/best-way-to-find-an-intersection-between-two-arrays –

+0

執行位置和實體的大小有關係與他們在陣列中的位置? –

+0

是的,每個指標乘以寬度/高度來獲得位置。 – Dreadnought

回答

1

這很大程度上取決於您的遊戲機制。但從一般意義上講,我會建議調查Quadtrees(http://en.m.wikipedia.org/wiki/Quadtree)。然後檢查您的相機重疊的節點並繪製其內容。

+0

好的謝謝,我會研究它。 – Dreadnought

0

前段時間我遇到這個問題時,我使用相機的x,y,寬度和高度值來渲染函數,通過更改for循環的起始位置來確定渲染的位置。

public void render(Camera camera, Graphics g) { 
    // --------------------------------------------------------- // 
    // Optimized rendering function to only draw what the camera // 
    // can see             // 
    // --------------------------------------------------------- // 
    int minX = toTileX(camera.getX()); 
    int minY = toTileY(camera.getY()); 
    int maxX = toTileX(camera.getX()) + toTileX(camera.getViewWidth()); 
    int maxY = toTileY(camera.getY()) + toTileY(camera.getViewHeight()); 

    for (TiledLayer l : layers) { 
     for (int y = minY; y < maxY + 1; y++) { 
      if (y < height && y >= 0) { 
       for (int x = minX; x < maxX + 1; x++) { 
        if (x < width && x >= 0) { 
         Tile tile  = l.getTile(x, y); 
         TileSheet sheet = null; 

         try { 
          sheet = tileSheets.get(tile.getTileSetId()); 
         } catch (InvalidKeyException e) { 
          e.printStackTrace(); 
         } 

         Image image = sheet.getImage(tile.getTileId()); 

         g.drawImage(image, 
            x * tileWidth, 
            y * tileHeight, 
            (x * tileWidth) + tileWidth, 
            (y * tileHeight) + tileHeight, 
            0, 
            0, 
            tileWidth, 
            tileHeight); 
        } 
       } 
      } 
     } 
    } 
} 
+0

這很好,但我在我的遊戲中擴展,我使用Slick2D庫,如果我嘗試縮放,則沒有任何東西會呈現。我不知道Slick2D如何根據比例來轉換位置,所以任何人都可以幫忙?我的比例是0.8 – Dreadnought