Java Libgdx跟随鼠标|投影?
我试图让对象播放器不断跟随我的鼠标,但我在相机投影方面遇到了一些问题Java Libgdx跟随鼠标|投影?,java,android,Java,Android,我试图让对象播放器不断跟随我的鼠标,但我在相机投影方面遇到了一些问题 * Displays the Game<br> */ private void showGame() { batch.setProjectionMatrix(camera.projection); batch.setTransformMatrix(camera.view); batch.begin(); bitfontBig.setColor(CurrentColor);
* Displays the Game<br>
*/
private void showGame() {
batch.setProjectionMatrix(camera.projection);
batch.setTransformMatrix(camera.view);
batch.begin();
bitfontBig.setColor(CurrentColor);
// draw the highscore
if (score < 10) {
bitfontBig
.draw(batch,
"0" + String.valueOf(score),
380 - (bitfontBig.getBounds("0"
+ String.valueOf(score)).width / 2),
(1200 / 2)
+ (bitfontBig.getBounds("0"
+ String.valueOf(score)).height / 2));
} else {
bitfontBig
.draw(batch,
String.valueOf(score),
380 - (bitfontBig.getBounds(String.valueOf(score)).width / 2),
(1200 / 2)
+ (bitfontBig.getBounds(String
.valueOf(score)).height / 2));
}
// Draw the Spikes
for (Spike spike : spikes) {
if (bird.flyToTheLeftSide) {
batch.draw(Texture_Spike_Left, (-30) + spike.size, spike.y);
} else {
batch.draw(Texture_Spike_Right, 672 - spike.size, spike.y);
}
}
// Draw the Bird
if (bird.flyToTheLeftSide) {
CurrentFrame = BirdAnimation.getKeyFrame(statetime, true);
} else {
CurrentFrame = BirdAnimationRight.getKeyFrame(statetime, true);
}
batch.draw(CurrentFrame, bird.position.x, bird.position.y);
batch.end();
////PLAYER
batch.begin();
PlayerSprite.draw(batch);
PlayerSprite.setPosition(Gdx.input.getX(), Gdx.input.getY());
batch.end();
shaperenderer.setProjectionMatrix(camera.projection);
shaperenderer.setTransformMatrix(camera.view);
shaperenderer.begin(ShapeType.Filled);
*显示游戏
*/
私人游戏{
batch.setProjectionMatrix(camera.projection);
batch.setTransformMatrix(camera.view);
batch.begin();
bitfontBig.setColor(CurrentColor);
//得分最高
如果(分数<10){
比特方特比格
.抽签(批),
“0”+字符串的值(分数),
380-(bitfontBig.getBounds(“0”)
+字符串.valueOf(score)).width/2),
(1200 / 2)
+(bitfontBig.getBounds(“0”)
+字符串.valueOf(score)).height/2);
}否则{
比特方特比格
.抽签(批),
字符串.valueOf(分数),
380-(bitfontBig.getBounds(String.valueOf(score)).width/2),
(1200 / 2)
+(bitfontBig.getBounds(字符串)
.分值(分)、身高/2);
}
//拔钉子
用于(尖峰:尖峰){
如果(鸟飞到左侧){
批处理绘制(纹理图,左,(-30)+Spike.size,Spike.y);
}否则{
批处理绘制(纹理图右,672-Spike.size,Spike.y);
}
}
//画鸟
如果(鸟飞到左侧){
CurrentFrame=BirdAnimation.getKeyFrame(statetime,true);
}否则{
CurrentFrame=BirdAnimationRight.getKeyFrame(statetime,true);
}
批量绘制(当前帧,bird.position.x,bird.position.y);
batch.end();
////玩家
batch.begin();
PlayerSprite.draw(批量);
PlayerSprite.setPosition(Gdx.input.getX(),Gdx.input.getY());
batch.end();
设置投影矩阵(camera.projection);
setTransformMatrix(camera.view);
开始(ShapeType.Filled);
问题是当我向下移动鼠标时,Player对象向上移动,反之亦然。同时,我认为它有一些延迟响应
感谢您的帮助
感谢libGDX在内部反转Y轴,因此它指向上,而不是下。此外,原点从屏幕的左上角移动到左下角。由此产生的坐标系是数学家(和大多数其他人)所使用的坐标系用于。要撤消反转,只需从屏幕高度减去y值,如下所示:
PlayerSprite.setPosition(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY());
如果玩家仍然表现怪异,请尝试只否定y值
PlayerSprite.setPosition(Gdx.input.getX(), -Gdx.input.getY());
我也会考虑维利奇的建议:
shaperenderer.setProjectionMatrix(camera.combined);
响应延迟可能是因为您在更新玩家之前绘制了该玩家。因此,用户总是看到他“在哪里”,而不是他“在哪里”。只需先更新玩家,然后绘制:
PlayerSprite.setPosition(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY());
PlayerSprite.draw(batch);
我希望我能帮上忙=)。您是否尝试过仅设置batch.setProjectonMatrix(camera.combined);