所以,我正在使用LibGdx并尝试使用他们的Rectangle类作为按钮按下触摸屏的界限。它以1:1的比例完美地工作,但是当我将游戏放在我的手机上(使用较小的屏幕)时,图像会缩放并正确绘制,但矩形不会。所以我试着保持我的矩形正常比例,并“升级”触摸屏的XY Coords,但我想我做得不对,因为它不起作用。
optionsMenu = new Vector<Rectangle>();
optionsMenu.add(new Rectangle(100 + (120 * 0), 100, 100, 100));
optionsMenu.add(new Rectangle(100 + (120 * 1), 100, 100, 100));
optionsMenu.add(new Rectangle(100 + (120 * 2), 100, 100, 100));
optionsMenu.add(new Rectangle(100 + (120 * 3), 100, 100, 100));
这就是我如何初始化我的边界矩形。
这就是我正在使用相机的方式:
camera = new OrthographicCamera();
camera.setToOrtho(true, 800, 480);
这就是我绘制按钮的方式:
spriteBatch.draw(buttonImage, optionsMenu.get(2).bounds.getX(),
optionsMenu.get(2).bounds.getY(), optionsMenu.get(2).bounds.getWidth(),
optionsMenu.get(2).bounds.getHeight(), 0, 0, buttonImage.getWidth(),
buttonImage.getHeight(), false, true);
这就是我的触摸屏逻辑:
public boolean tap(float x, float y, int count, int button) {
Vector3 temp = new Vector3(x, y, 0);
camera.unproject(temp);
float scalePos = (int) ((float) Gdx.graphics.getWidth()/800.0f);
temp.x = temp.x * scalePos;
temp.y = temp.y * scalePos;
if(optionsMenu.get(0).bounds.contains(temp.x, temp.y)){
//do sutff
}
else if(optionsMenu.get(1).bounds.contains(temp.x, temp.y)){
//do other stuff
}
return false;
}
答案 0 :(得分:4)
前几天我遇到了同样的问题。这就是我解决它的方法:
如果您正在使用视口,则应将该数据添加到camera.unproject
调用,以确保正在考虑视口。
例如:
camera.unproject(lastTouch,viewport.x,viewport.y,viewport.width,viewport.height);
要调试矩形边界和触摸位置,我使用此方法将它们绘制到屏幕中:
private static ShapeRenderer debugShapeRenderer = new ShapeRenderer();
public static void showDebugBoundingBoxes(List<Rectangle> boundingBoxes) {
debugShapeRenderer.begin(ShapeType.Line); // make sure to end the spritebatch before you call this line
debugShapeRenderer.setColor(Color.BLUE);
for (Rectangle rect : boundingBoxes) {
debugShapeRenderer.rect(rect.x, rect.y, rect.width, rect.height);
}
debugShapeRenderer.end();
}