Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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_Libgdx - Fatal编程技术网

Java 发出碰撞坐标Libgdx

Java 发出碰撞坐标Libgdx,java,libgdx,Java,Libgdx,我有一个问题,我会解释: 我有一个由OrthogonalTiledMapRenderer和OrthographicCamera渲染的平铺贴图,我在create方法中有以下代码: map=new TmxMapLoader().load("Map.tmx"); this.renderer=new OrthogonalTiledMapRenderer(map); this.camera=new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphic

我有一个问题,我会解释:

我有一个由OrthogonalTiledMapRenderer和OrthographicCamera渲染的平铺贴图,我在create方法中有以下代码:

map=new TmxMapLoader().load("Map.tmx");
this.renderer=new OrthogonalTiledMapRenderer(map);
this.camera=new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
this.camera.translate(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);
this.camera.update();
在渲染方法中:

this.renderer.setView(camera);
this.renderer.render();
camera.update();
batchM.begin();
sprite.draw(batchM);
batchM.end();
我还有一个始终在渲染方法中按批绘制的精灵:

this.renderer.setView(camera);
this.renderer.render();
camera.update();
batchM.begin();
sprite.draw(batchM);
batchM.end();
始终在渲染方法中,我从TileMap提取所有MapObject,并检查它们是否击中精灵:

 MapObjects collisionObjects =  map.getLayers().get("objects").getObjects();
        for(MapObject object : collisionObjects) {

               if (object instanceof RectangleMapObject) {
                   RectangleMapObject rect = ((RectangleMapObject) object);


                  Vector3 coo=camera.project(new
    Vector3(rect.getRectangle().x,rect.getRectangle().y,0));


                    com.badlogic.gdx.math.Rectangle Sprite= sprite.getBoundingRectangle();
                    com.badlogic.gdx.math.Rectangle Map=new com.badlogic.gdx.math.Rectangle(coo.x,coo.y,32,32);

                   //TEST
                   System.out.println("SPRITE X: "+Sprite.x+" Y: "+Sprite.y);
                   System.out.println("Object X: "+Map.x+" Y: "+Map.y);

                    if(Intersector.intersectRectangles(Sprite, Map, Sprite)) System.out.println("HIT");
                    }

                }
我的问题是:

如果我保持正常窗口大小(即启动程序时的大小),将精确检测碰撞

而如果我减小或增大窗口的大小,碰撞将被不精确地检测到

我特别注意到这个奇怪的现象:

当我从地图中提取对象时,我显示了对象和精灵的坐标,我注意到精灵的坐标保持不变,而对象的坐标却在变化,我无法解释原因

非常感谢您的时间和帮助

编辑:

更改坐标的示例:

开始窗口大小:

雪碧X:310.0 Y:270.0

对象X:384.0 Y:352.0

击中

然后,我不移动精灵,只更改窗口大小(增加),得到以下结果:

雪碧X:310.0 Y:270.0


对象X:586.2 Y:540.4667

在不使用相机的情况下尝试。投影是因为这会将世界坐标投影到屏幕坐标“Vector3 coo”,因此,当您更改屏幕大小时,您会更改对象X的位置。您好,是的,按照您说的做问题已经解决,但还有另一个问题,相机中有什么(平铺贴图)表示背景,因此如果我向下滚动(从而移动相机的y坐标),碰撞不会被检测到。轻轻地,你可以帮我一把。