发出碰撞坐标Libgdx

时间:2014-08-27 00:04:58

标签: java libgdx

我有坐标问题,我将解释:

我有一个由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();

我还有一个精灵,它总是在渲染方法中通过Batch绘制:

batchM.begin();
sprite.draw(batchM);
batchM.end();

总是在渲染方法中,我从Tiledmap中提取所有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");
                    }

                }

我的问题是:

如果我保持正常的窗口大小(即我启动程序时的大小),则会精确地检测到冲突。

如果我减小或增加窗口的大小,则会不准确地检测到碰撞。

特别是我注意到这个奇怪之处:<​​/ p>

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

非常感谢你的时间和帮助

修改

更改坐标的示例:

起始窗口大小:

SPRITE X:310.0 Y:270.0

对象X:384.0 Y:352.0

HIT

然后我不移动精灵但只更改窗口大小(增加),我得到了这个:

SPRITE X:310.0 Y:270.0

对象X:586.2 Y:540.4667

0 个答案:

没有答案