我有坐标问题,我将解释:
我有一个由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