我正在尝试使用libgdx将十字准线精灵捕捉到我的游戏光标。游戏是自上而下的观点:
Texture crosshair_text = new Texture(Gdx.files.internal("data/crosshair1.png"));
this.crosshair = new Sprite(crosshair_text, 0, 0, 429, 569);
//...
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
cam.update();
batch.setProjectionMatrix(cam.combined);
batch.begin();
//.. sprites that scale based on camera (top-down view)
batch.end();
//draws 'ui' elements
floatingBatch.begin();
//...
//snap to cursor
this.crosshair.setPosition( Gdx.input.getX(), (Gdx.graphics.getHeight()-Gdx.input.getY()) );
//transform
this.crosshair.setScale(1/cam.zoom);
//draw
this.crosshair.draw(floatingBatch);
floatingBatch.end();
}
很抱歉,如果我没有抓到错误,这不是我的代码的精确副本。这里的问题是1.精灵没有捕捉到正确的位置和2.十字准线精灵落后于屏幕上鼠标的当前位置。谁能让我了解如何解决这两个问题?
答案 0 :(得分:1)
您的位置可能不正确,因为屏幕位置不一定是使用OrthographicCamera
进行绘制的正确位置,请先尝试使用unproject
。 E.g:
Vector3 mousePos = new Vector3( Gdx.input.getX(), (Gdx.graphics.getHeight()-Gdx.input.getY()), 0); //Get the mouse-x and y like in your code
cam.unproject(mousePos); //Unproject it to get the correct camera position
this.crosshair.setPosition(mousePos.x, mousePos.y); //Set the position
另外,您需要确保将浮动批次设置为相机的投影矩阵,添加以下代码:
floatingBatch.setProjectionMatrix(cam.combined);
答案 1 :(得分:1)
您可以更改光标图像,而不是在鼠标位置绘制Sprite
:
Gdx.input.setCursorImage(cursorPixMap, hotspotX, hotspotY);
如果cursorPixMap
是新光标图片的PixMap
,则hotspotX
和hotspotY
是"来源" PixMap
/光标图像。在您的情况下,它将是crosshair
的中心
基本上Gdx.input.getX()
和Gdx.input.getY()
会返回hotspotX
和hotspotY
的当前位置。
我建议阅读关于cursor的wiki artikcle。