当摄影机坐标与窗口坐标不匹配时,Java libGDX不会绘制精灵
我的libGDX引擎有问题。我有一对变量来设置屏幕的宽度和高度,还有一对变量来设置相机的宽度和高度。但是,只要摄影机的大小与屏幕的大小不同,引擎将不会渲染任何精灵。以下是我的代码供您查看: 我的常数:当摄影机坐标与窗口坐标不匹配时,Java libGDX不会绘制精灵,java,libgdx,Java,Libgdx,我的libGDX引擎有问题。我有一对变量来设置屏幕的宽度和高度,还有一对变量来设置相机的宽度和高度。但是,只要摄影机的大小与屏幕的大小不同,引擎将不会渲染任何精灵。以下是我的代码供您查看: 我的常数: public abstract class Constants { public static final int WINDOW_WIDTH = 800; public static final int WINDOW_HEIGHT = 600; public stati
public abstract class Constants
{
public static final int WINDOW_WIDTH = 800;
public static final int WINDOW_HEIGHT = 600;
public static final int CAMERA_WIDTH = 800;
public static final int CAMERA_HEIGHT = 600;
}
创建精灵的位置:
public class GameController
{
public static final String TAG = GameController.class.getName();
public Sprite[] testSprites;
public int selectedSprite;
public GameController()
{
init();
}
private void init()
{
initTestObjects();
}
private void initTestObjects()
{
testSprites = new Sprite[1];
int width = 32;
int height = 32;
Pixmap pixmap = createProceduralPixmap(width, height);
Texture texture = new Texture(pixmap);
for(int i = 0; i < testSprites.length; i++)
{
Sprite spr = new Sprite(texture);
spr.setSize(32, 32);
spr.setOrigin(spr.getWidth() / 2.0f, spr.getHeight() / 2.0f);
spr.setPosition(0, 0);
testSprites[i] = spr;
}
selectedSprite = 0;
}
private Pixmap createProceduralPixmap(int width, int height)
{
Pixmap pixmap = new Pixmap(width, height, Format.RGBA8888);
pixmap.setColor(1, 0, 0, 0.5f);
pixmap.fill();
pixmap.setColor(1, 1, 0, 1);
pixmap.drawLine(0, 0, width, height);
pixmap.drawLine(width, 0, 0, height);
pixmap.setColor(0, 1, 1, 1);
pixmap.drawRectangle(0, 0, width, height);
return pixmap;
}
public void update(float deltaTime)
{
updateTestObjects(deltaTime);
}
public void updateTestObjects(float deltaTime)
{
float rotation = testSprites[selectedSprite].getRotation();
rotation += 90 * deltaTime;
rotation %= 360;
testSprites[selectedSprite].setRotation(rotation);
}
}
上面的代码工作得很好,将在屏幕中央渲染一个精灵,但当我将CAMERA_WIDTH和CAMERA_HEIGHT分别更改为80和60时,它不会绘制任何东西,而不是将精灵放大10倍。有什么建议吗?您将整数除以整数,因此最终得到的数字比例很差。例如:
camera.viewportWidth =
(Constants.CAMERA_HEIGHT / height) * width;
如果屏幕宽度和高度分别为800和600,并且CAMERA\u height
为60,则公式为
camera.viewportWidth =
(60 / 600) * 800;
这会变成(由于纯整数数学):
变成0。你需要在除法之前将这些整数转换成浮点数!这可能不是唯一的问题,但它本身可能会导致您的问题。您将整数除以整数,因此最终的数字比例很差。例如:
camera.viewportWidth =
(Constants.CAMERA_HEIGHT / height) * width;
如果屏幕宽度和高度分别为800和600,并且CAMERA\u height
为60,则公式为
camera.viewportWidth =
(60 / 600) * 800;
这会变成(由于纯整数数学):
变成0。你需要在除法之前将这些整数转换成浮点数!这可能不是唯一的问题,但它本身可能会导致您的问题。您将整数除以整数,因此最终的数字比例很差。例如:
camera.viewportWidth =
(Constants.CAMERA_HEIGHT / height) * width;
如果屏幕宽度和高度分别为800和600,并且CAMERA\u height
为60,则公式为
camera.viewportWidth =
(60 / 600) * 800;
这会变成(由于纯整数数学):
变成0。你需要在除法之前将这些整数转换成浮点数!这可能不是唯一的问题,但它本身可能会导致您的问题。您将整数除以整数,因此最终的数字比例很差。例如:
camera.viewportWidth =
(Constants.CAMERA_HEIGHT / height) * width;
如果屏幕宽度和高度分别为800和600,并且CAMERA\u height
为60,则公式为
camera.viewportWidth =
(60 / 600) * 800;
这会变成(由于纯整数数学):
变成0。你需要在除法之前将这些整数转换成浮点数!这可能不是唯一的问题,但它本身可能会导致您的问题。是我的问题,还是您在任何时候都没有调用resize()?我可以看到resize()但看不到它在哪里被调用?我可能只是错过了调用。当屏幕大小改变时,会自动调用resize(),比如你点击窗口上的“最大化”按钮或拉伸它。真的,我在方法或任何侦听器上都看不到任何@Override注释吗?关于
camera.viewportHeight
它不需要更新吗?在该等式中,不,我们的想法是,高度将始终是相同数量的世界单位,但随着宽度相对于高度的变化,它将显示更多/更少的世界。这只是我的问题,还是您在任何时候都不调用resize()?我可以看到resize()但看不到它在哪里被调用?我可能只是错过了调用。当屏幕大小改变时,会自动调用resize(),比如你点击窗口上的“最大化”按钮或拉伸它。真的,我在方法或任何侦听器上都看不到任何@Override注释吗?关于camera.viewportHeight
它不需要更新吗?在该等式中,不,我们的想法是,高度将始终是相同数量的世界单位,但随着宽度相对于高度的变化,它将显示更多/更少的世界。这只是我的问题,还是您在任何时候都不调用resize()?我可以看到resize()但看不到它在哪里被调用?我可能只是错过了调用。当屏幕大小改变时,会自动调用resize(),比如你点击窗口上的“最大化”按钮或拉伸它。真的,我在方法或任何侦听器上都看不到任何@Override注释吗?关于camera.viewportHeight
它不需要更新吗?在该等式中,不,我们的想法是,高度将始终是相同数量的世界单位,但随着宽度相对于高度的变化,它将显示更多/更少的世界。这只是我的问题,还是您在任何时候都不调用resize()?我可以看到resize()但看不到它在哪里被调用?我可能只是错过了调用。当屏幕大小改变时,会自动调用resize(),比如你点击窗口上的“最大化”按钮或拉伸它。真的,我在方法或任何侦听器上都看不到任何@Override注释吗?关于camera.viewportHeight
它不需要更新吗?在该等式中,不,这个想法是高度将始终是相同数量的世界单位,但随着宽度相对于高度的变化,它将显示更多/更少的世界。这就解决了它!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!这就解决了!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!这就解决了!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!这就解决了!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!