【发布时间】:2016-09-09 22:48:40
【问题描述】:
我目前正在为我的游戏在菜单屏幕上编程。我试图创建一个 Rectangle 来检查 Sprite Button 是否被触摸。我使用任意世界坐标public static int WIDTH = 1080 , HEIGHT = 720;
public void create() {
cam = new OrthoCamera();
cam.resize();
texture = new Texture("Button.png");
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
TextureRegion region = new TextureRegion(texture, 59, 52, 300,250);
sprite = new Sprite(region);
sprite.setSize(sprite.getWidth() , sprite.getHeight() )
sprite.setPosition(MyGdxGame.WIDTH / 2, MyGdxGame.HEIGHT / 2);
}
我正在使用一个特殊的正交相机,如果你想查看这两个相关的类,请点击here。 (不是我的项目)
public void update(OrthoCamera cam) {
if(Gdx.input.isTouched())
{
Vector3 tmp = new Vector3( Gdx.input.getX(), Gdx.input.getY(), 0);
cam.unproject(tmp);
Rectangle textureBounds = new Rectangle(0,0, 300, 250); //origin at center ?!
if(textureBounds.contains(tmp.x,tmp.y))
{
//ScreenManager.setScreen(new GameScreen());
System.out.println("Rectangle")
}
}
}
通过测试,我认识到不知何故矩形坐标系的原点位于中心,并且宽度和高度设置得很高。在这里,您可以看到我通过单击打印出“矩形”的区域的图片。通常矩形的原点应该在左下角,对吧?
【问题讨论】:
-
OrthoCamera 类是可憎的。 :) 它具有从超类复制的参数,并在一些不必要的重写方法中将这些参数与超类的参数混合和匹配。 VirtualViewport 类看起来也很复杂。您的问题可能与未仔细实现超类方法的重写类有关。 VirtualViewport 类也很复杂。您应该使用内置的 Libgdx ExtendViewport 类,使用普通的 OrthographicCamera。
标签: java android libgdx orthographic