【问题标题】:Strange scaling in LibgdxLibgdx 中的奇怪缩放
【发布时间】:2014-06-26 05:21:30
【问题描述】:

我正在尝试将精灵均匀地拉伸到屏幕边界。 首先,我将精灵的原点设置为屏幕的中心。由于它是 Android 设备,因此我需要滚动几页才能到达末尾。根据我的经验,width*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)绘制它

在肉眼看来,它并没有消失。测量了距离,没有区别。

现在我应用一个比例:

mSprite.setScale(1.2f, 1.2f);

结果:

如您所见,缩放后,精灵不再出现在中心。

为什么?我究竟做错了什么?如果这是它应该的工作方式,任何人都可以推荐一个可行的解决方法来统一缩放精灵吗?

谢谢

【问题讨论】:

    标签: java android libgdx 2d


    【解决方案1】:

    而不是使用整个屏幕坐标来设置精灵的原点,你应该使用精灵的宽度和高度:

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

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

    由于精灵的原点不会影响您设置位置的方式(它将始终在左下角)

    将位置设置在中间:

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

    这也假设您的相机位于 (screenWidth/2f,screenHeight/2f) 位置。

    如果您的相机没有看 (screenWidth/2f,screenHeight/2f) 而是定位在 (0,0),则像这样设置精灵的位置:

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

    【讨论】:

    • 那是因为我希望它被绘制在屏幕中间。我想缩放它以填满屏幕。由于缩放是围绕原点进行的,因此它必须位于屏幕中间。我试过你的建议(没有比例),它把黑色矩形放在左下角。在我缩放它之后,它在右上角进一步扩大。细节的损失并不明显,因为它只是一个黑色矩形。但如果是合适的背景,缩放后,左下角将不可见,因为它会扩展到屏幕之外。
    • 将精灵原点设置为屏幕原点实际上不会在中间设置精灵原点。相反,它可能会将其设置在屏幕外的某个位置(只是猜测我不知道精灵或屏幕的大小)。你在这里遗漏了一点。我将编辑我的答案。
    • 好的,现在我明白了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多