Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当摄影机坐标与窗口坐标不匹配时,Java libGDX不会绘制精灵_Java_Libgdx - Fatal编程技术网

当摄影机坐标与窗口坐标不匹配时,Java 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

我的libGDX引擎有问题。我有一对变量来设置屏幕的宽度和高度,还有一对变量来设置相机的宽度和高度。但是,只要摄影机的大小与屏幕的大小不同,引擎将不会渲染任何精灵。以下是我的代码供您查看:

我的常数:

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
它不需要更新吗?在该等式中,不,这个想法是高度将始终是相同数量的世界单位,但随着宽度相对于高度的变化,它将显示更多/更少的世界。这就解决了它!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!这就解决了!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!这就解决了!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!这就解决了!真不敢相信我竟然忘了这么简单的事。虽然宽度很好,但实际上我认为这是相机内部的一些问题。不管怎样,谢谢你!