Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libGDX-如何在摄影机视口中而不是按层复制平铺?_Java_Android_Libgdx_Tiled - Fatal编程技术网

Java 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

我正在尝试复制摄影机视口中的一组平铺(使用平铺和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]);
        }
}

}
这很好,但这不是我想要的。不复制整个图层,我只想复制复制时相机视口中的内容。然后我想将它粘贴到屏幕顶部,并以一种使粘贴不可见的方式重置摄影机的视口。(我基本上是把屏幕的下半部分放在顶部,以便在下面生成新的值)

我该怎么做


谢谢

您可以浏览所有瓷砖,如果它们位于摄影机视口的边界内,则将其添加到某个数组中(或仅对其执行某些操作)。您可以像这样检查边界:

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
}