2014-05-20 25 views
0

我試圖複製相機視口內的一組圖塊(使用Tiled和libGDX)。現在我有一個複製和粘貼代碼:libGDX - 如何在攝像機視口中而不是按層複製切片?

package com.divergent.tapdown; 

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.maps.tiled.TiledMapTile; 
import com.badlogic.gdx.maps.tiled.TiledMapTileLayer; 
import com.badlogic.gdx.maps.tiled.TiledMapTileLayer.Cell; 

public abstract class TileMapCopier { 

public static TiledMapTile[][] copyRegion(TiledMapTileLayer layer, int x, int y, int width, int height) { 
    TiledMapTile[][] region = new TiledMapTile[width][height]; 

    for (int ix = x; ix < x + width; ix++) 
     for (int iy = y; iy < y + height; iy++) { 
      Cell cell = layer.getCell(ix, iy); 
      if (cell == null) 
       continue; 
      region[ix - x][iy - y] = cell.getTile(); 
     } 

    return region; 
} 

public static void pasteRegion(TiledMapTileLayer layer, TiledMapTile[][] region, int x, int y) { 
    for (int ix = x; ix < x + region.length; ix++) 
     for (int iy = y; iy < y + region[ix].length; iy++) { 
      Cell cell = layer.getCell(ix, iy); 
      if (cell == null) { 
       Gdx.app.debug(TileMapCopier.class.getSimpleName(), "pasteRegion: skipped [" + ix + ";" + iy + "]"); 
       continue; 
      } 
      cell.setTile(region[ix - x][iy - y]); 
     } 
} 

} 

這需要在層上的所有單元格,並將其粘貼到屏幕上時,我希望它:

public void show() { 
    final TiledMapTileLayer layer = ((TiledMapTileLayer) map.getLayers().get(0)); 
    camera.position.x = layer.getWidth() * layer.getTileWidth()/2; 
    camera.position.y = layer.getHeight() * layer.getTileHeight()/2; 
    camera.zoom = 3; 

    Gdx.input.setInputProcessor(new InputAdapter() { 

     TiledMapTile[][] clipboard; 

     @Override 
     public boolean keyDown(int keycode) { 
      if(keycode == Keys.C) // copy 
       clipboard = TileMapCopier.copyRegion(layer, 0, 0, layer.getWidth(), layer.getHeight()/2); 
      if(keycode == Keys.P) // paste 
       TileMapCopier.pasteRegion(layer, clipboard, 0, layer.getHeight()/2); 
      return true; 
     } 

    }); 
} 

這是偉大的,但它不是我想要的。而不是複製整個圖層,我只想在複製時複製相機視口內的內容。然後,我想將其粘貼到屏幕頂部,並以使粘貼不可通知的方式重置相機的視口。 (Im本質上採取屏幕的下半部分,並將其放在頂部,以在下面生成新的值)

我該怎麼做?

謝謝!

回答

1

你可以通過所有的瓷磚,如果他們在相機視口的邊界,然後將其添加到一些數組(或只是做一些與他們)。你可以檢查這樣的邊界:

for(int i = 0; i < allTiles.size; i++) { 
    Tile t = allTiles.get(i); 
    MapProperties props = t.getProperties(); 
    float x = (float) props.get("x"); 
    float y = (float) props.get("y"); 
    if(x > camera.position.x && x < camera.position.x + camera.vieportWidth 
     y > camera.position.y && y < camera.position.y + camera.vieportHeight) 
      //do something with the tile, because it IS inside the camera sight 
} 
+0

我已經粘貼它,但它並沒有順利粘貼。我希望它可以同時粘貼和更改攝像頭視口,使其看起來不會被粘貼。它應該看起來就像只停留在同一個地方。 – Divergent

+0

您可以發佈截圖嗎?我不太清楚你現在在說什麼。 也許你太頻繁地調用這個方法,你應該只是有時候打電話。 – ViliX64

+0

我可以通過Skype或TeamView或其他方式向你展示嗎?它更多的是一個視覺問題:S – Divergent

相關問題