Java libGDX-如何在摄影机视口中而不是按层复制平铺?
我正在尝试复制摄影机视口中的一组平铺(使用平铺和libGDX)。现在我有一个复制粘贴代码:Java libGDX-如何在摄影机视口中而不是按层复制平铺?,java,android,libgdx,tiled,Java,Android,Libgdx,Tiled,我正在尝试复制摄影机视口中的一组平铺(使用平铺和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.Tiled
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]);
}
}
}
这很好,但这不是我想要的。不复制整个图层,我只想复制复制时相机视口中的内容。然后我想将它粘贴到屏幕顶部,并以一种使粘贴不可见的方式重置摄影机的视口。(我基本上是把屏幕的下半部分放在顶部,以便在下面生成新的值)
我该怎么做
谢谢 您可以浏览所有瓷砖,如果它们位于摄影机视口的边界内,则将其添加到某个数组中(或仅对其执行某些操作)。您可以像这样检查边界:
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
}
for(int i=0;icamera.position.x&&xcamera.position.y&&y
我现在已经把它粘贴了,但粘贴起来并不顺畅。我希望它能够同时粘贴和更改摄影机视口,使其看起来甚至不像粘贴的那样。它看起来应该只是停留在同一个地方。你能发布一个截图吗?我不太清楚你现在在说什么。也许你调用这个方法太频繁了,你只应该偶尔调用它。我可以通过skype或teamview或其他方式向你展示吗?这更多的是一个视觉问题:我认为主要的问题是它仍然没有真正复制摄影机视口中的元素
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
}