在libgdx

时间:2016-03-09 21:14:03

标签: java libgdx sprite

我在向我的项目绘制精灵时遇到了问题。

我有一张地图(960x900),分为图块(64x64)。

如图所示,当我点击紫色方块的左下角时,位置为(0; 0),当我点击紫色方块的右上角时,位置为( 36; 47)

问题是紫色方块的图片大小为32x32,当我在屏幕上用libgdx绘制这张图片时,尺寸不匹配。

the problem is the purple gem

另一个例子:黑色边框的正方形尺寸为64x64。所以,如果我在黑色前面绘制紫色正方形,紫色应该是黑色的一半(高度和宽度),不是吗?

有谁知道为什么libgdx会调整紫色方块的大小?

Sprite sprite = new Sprite(new Texture("assets/purpleSquare.png"));

我用方法

绘制它
public void render(SpriteBatch batch) {
    batch.draw(sprite, 0, 0);
}

我不知道为什么图片会被libgdx调整大小..我也试过了

batch.draw(sprite, 0, 0, width, heigth);

要精确调整精灵的大小,但它也不起作用..

2 个答案:

答案 0 :(得分:3)

屏幕上的尺寸与原始图像的大小没有直接关系。绘制精灵时,在世界坐标中为SpriteBatch提供位置,宽度和高度。无论原始图像大小如何,精灵都将被拉伸以适合这些世界坐标。

点击屏幕后,您点击屏幕坐标。屏幕和世界坐标之间的关系由您与SpriteBatch一起使用的投影矩阵确定。投影矩阵通常由Camera或Viewport对象控制,您可以使用projectunproject方法在两个坐标系之间进行转换。

答案 1 :(得分:-1)

我很高兴地看到,经过几个小时我找到了解决方案,即使我知道哪个不正确。

我想帮助理解问题的起源。

使用这部分代码:

public void update(float delta) {       
    batch.begin();

    drawBackground(); // Draw the background
    drawButton(); // Draw the play/pause button

    batch.end();

    drawMap(); // draw a tmx map made with tiled

    batch.begin();

    if(!world.isInitial()) {
        renderMonster(); // method which draw the monster
    }

    renderTower(); // method which draw the tower's level

    batch.end();
}
  1. 我不明白我为什么要做" batch.begin()"和" batch.end()"两次。
  2. 我不喜欢'理解为什么使用这个代码,紫色方块会调整大小。
  3. 使用此代码:

    public void update(float delta) {       
        batch.begin();
    
        drawBackground();
        drawButton();
    
        batch.end();
    
        drawMap();
    
        ------->sb = new SpriteBatch();
    
        sb.begin();
    
        if(!world.isInitial()) {
            renderMonster();
        }
    
        renderTower();
    
        sb.end();
    }
    

    我添加的这行修复了紫色方块的错误。如果我使用两个SpriteBatch(因为有一个,如果我在更新方法中重新初始化SpriteBatch,我的暂停/播放按钮消失)并且我在更新方法中初始化第二个(SpriteBatch sb)。

    每次传递更新方法时初始化SpriteBatch是正确的吗?没有使用SpriteBatch的方法来避免这个问题?