有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Libgdx中的java奇怪伸缩

我想把一个精灵拉到屏幕上。 首先,我将精灵的原点设置在屏幕的中心。因为它是安卓设备,所以我有几个页面要滚动到最后。根据我的经验,宽度*2覆盖了额外的距离

mSprite.setOrigin(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()/2);
//these return 1080 and 960 on my device

接下来,我设置精灵的X和Y相对于原点:

mSprite.setPosition(mSprite.getOriginX()-mSprite.getWidth()/2, mSprite.getOriginY()-mSprite.getHeight()/2);
//sprite width and height are 1440 and 1280

现在用mSprite.draw(batch)来画它

leftright

用肉眼看,它不会掉头。测量完距离后,没有差别

现在我应用一个标尺:

mSprite.setScale(1.2f, 1.2f);

结果:

leftright

正如你所见,缩放后,精灵似乎不再位于中心

为什么?我做错了什么?如果这就是它应该如何工作的话,有谁能推荐一个可行的解决方案来统一缩放精灵

谢谢


共 (1) 个答案

  1. # 1 楼答案

    与其使用整个屏幕坐标来设置精灵的原点,不如使用精灵的宽度和高度:

    mSprite.setOrigin(mSprite.getWidth()/2f, mSprite.getHeight()/2f);
    

    精灵使用在精灵左下角具有(0,0)的单独坐标系

    因为精灵的起源不会影响你设置位置的方式(它总是在左下角)

    将位置设置为中间:

    mSprite.setPosition(screenWidth/2f-mSprite.getWidth/2f,screenHeight/2f - mSprite.getHeight/2f);
    

    这还假设您的相机处于位置(屏幕宽度/2f、屏幕高度/2f)

    如果你的相机不看(屏幕宽度/2f,屏幕高度/2f),而是定位在(0,0),那么设置精灵的位置如下:

    mSprite.setPosition(-mSprite.getWidth/2f, - mSprite.getHeight/2f);