首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >居中地图或相机2D游戏

居中地图或相机2D游戏
EN

Stack Overflow用户
提问于 2015-03-30 19:17:32
回答 1查看 112关注 0票数 0

我尝试了太多的解决方案,可能是我的代码有点混乱,但无论我怎么尝试,它都不能工作。

基本上,我用瓷砖做了一张地图,我的玩家可以在那里跑来跑去,撞上东西。我希望整个地图在整个时间内都是可见的(它是20x15,64像素的瓦片)。相机不需要移动或跟随玩家,它必须停留在地图的中心不动。

问题是地图只显示在屏幕的右上角。当我将相机对准地图本身时,它会扰乱拼接检测(在看不到树的时候撞到树&穿过看得见的树)。所以我想做的是将地图居中到0,0,我的相机也在那里(至少我认为..)。

我想要完成的另一件事是调整地图的大小以匹配不同的手机。尝试使用拉伸视口完成此操作,但无法对其进行测试。

代码语言:javascript
复制
public class PlayScreen implements Screen {
    TiledMap map;
    OrthogonalTiledMapRenderer mapRenderer; 
    OrthographicCamera cam;        
    float unitScale = 1 / 64f;
    OrthogonalTiledMapRenderer renderer = new OrthogonalTiledMapRenderer(map, unitScale);
    Viewport viewport;



 public void show() {       
     map = new TmxMapLoader().load("maps/map.tmx");             
     mapRenderer = new OrthogonalTiledMapRenderer(map); 
     cam = new OrthographicCamera(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2);
     cam.setToOrtho(false);
     viewport = new StretchViewport(1280, 960, cam); 

        bounds = new ArrayList<Rectangle>();
        for(int i = 0; i < 20; i++){
            for(int j = 0; j < 15; j++){
                TiledMapTileLayer cur = (TiledMapTileLayer) map.getLayers().get(1); 
                Cell cell = new Cell(); 

                Vector3 center = new Vector3(cur.getWidth() * cur.getTileWidth() / 2, cur.getHeight() * cur.getTileHeight() / 2, 0);
                cam.position.set(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2, 0);
                cam.update();

                if(cur.getCell(i,j) != null){ //null = first layer   != --> if its not 
                    cell = cur.getCell(i, j);
                    System.out.println(i + ", " + j + ", " + cell.getTile().getId());
                    bounds.add(new Rectangle(i * 64, j * 64, 64 , 64)); 
            }
        }
   }    


public void render(float delta) {

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        mapRenderer.setView(cam);
        mapRenderer.render();

        cam.position.set(0, 0, 0);
        cam.update();

        batch.setProjectionMatrix(cam.combined);

        batch.begin();
        batch.draw(player.getCurrentFrame(), player.getPosition().x , player.getPosition().y);
        player.update(); 

        for(int i = 0; i < bounds.size(); i++){
            if(bounds.get(i).overlaps(player.getBounds())){
                int x = (int)bounds.get(i).x / 64;
                int y = (int)bounds.get(i).y / 64;

                TiledMapTileLayer cur = (TiledMapTileLayer)map.getLayers().get(1);
                Cell cell = cur.getCell(x, y);

                if(cell.getTile().getProperties().containsKey("blocked")){
                    System.out.println("bush"); 
                }
                player.reAdjust();
            }
        }

        batch.end();

 }


        public void resize(int width, int height) {
        viewport.update(width, height); 
    }   
EN

回答 1

Stack Overflow用户

发布于 2015-03-30 20:54:20

不要紧,我删除了: cam.position.set(0,0,0);,一切似乎都很好。我猜我已经做了一些改变,导致它工作,只是没有看到它,因为它仍然存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29344792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档