我在向我的项目绘制精灵时遇到了问题。
我有一张地图(960x900),分为图块(64x64)。
如图所示,当我点击紫色方块的左下角时,位置为(0; 0),当我点击紫色方块的右上角时,位置为( 36; 47)
问题是紫色方块的图片大小为32x32,当我在屏幕上用libgdx绘制这张图片时,尺寸不匹配。
另一个例子:黑色边框的正方形尺寸为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);
要精确调整精灵的大小,但它也不起作用..
答案 0 :(得分:3)
屏幕上的尺寸与原始图像的大小没有直接关系。绘制精灵时,在世界坐标中为SpriteBatch提供位置,宽度和高度。无论原始图像大小如何,精灵都将被拉伸以适合这些世界坐标。
点击屏幕后,您点击屏幕坐标。屏幕和世界坐标之间的关系由您与SpriteBatch一起使用的投影矩阵确定。投影矩阵通常由Camera或Viewport对象控制,您可以使用project
和unproject
方法在两个坐标系之间进行转换。
答案 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();
}
使用此代码:
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的方法来避免这个问题?