Java — Pixel иногда расширяется

#java #image #canvas #pixel

#java #изображение #холст #пиксель

Вопрос:

В настоящее время я пытаюсь создать свой первый, очень простой движок 2D-игры на Java для использования в следующем Ludum Dare, в котором я надеюсь принять участие. Однако я испытываю визуальное искажение (исключение не выдается) при рендеринге на холст. Иногда, в том, что кажется сеткой, пиксель на моем изображении (который был увеличен для игры) распространяется по оси x или y. пример: пиксель изображения, который должен был занимать область 2×2 на экране, теперь вместо этого занимает 2×3, 3×2 или 3×3.

Это класс, который я использую для рендеринга пикселей:

 public class Renderer
{
    private int width, height;
    private int[] pixelArray;
    public Renderer(GameContainer gc)
    {
        width = gc.getWidth();
        height = gc.getHeight();
        pixelArray = ((DataBufferInt)gc.getWindow().getImage().getRaster().getDataBuffer()).getData();

    }

    public void setPixel(int x, int y, int color)
    {
        if(x <0 || x > width || y < 0 || y > height) return;

        pixelArray[x   (y* width)] = color;
    }

    public void renderImage(Image image, int offsetX, int offsetY)
    {
    for(int x = 0; x < image.width; x  )
        {
            for(int y = 0; y < image.height; y  )
            {
                setPixel(x   offsetX, y   offsetY, image.pixels[x   (y * image.width)]);
            }
        }
    }

    public void clearScreen()
    {
        for(int x = 0; x < width; x  )    
        {
            for(int y = 0; y < height; y  )
            {
                setPixel(x, y, 0xff000000);
            }
        }
    }
}
  

Image это мой собственный класс (не AWT тот), который загружает отображаемое изображение и содержит переменные высоты и ширины, а также 2D-массив значений RGB для каждого пикселя.

Я надеюсь, что этой информации достаточно, чтобы кто-то мог помочь с проблемой. Если потребуется что-то еще, просто дайте мне знать.

Комментарии:

1. Вы получаете исключение или это просто визуальная ошибка? Редактировать: вначале это звучало так, как будто вы получаете исключение при рисовании на холсте. Но часть 2×3 вместо 2×2 звучит как визуальная ошибка.

2. Да, исключений нет, это просто визуальная ошибка.

3. Я не вижу никаких ошибок в фрагменте кода. Вы тестировали (с помощью println), если изображение. width и image.height верны?

4. Да. и ширина, и высота выводятся с правильным значением.

5. Хм, может быть, у вас есть какое-то последующее изображение? В виде: очистить изображение -> нарисовать фигуру -> переместить фигуру -> нарисовать фигуру. Если это тоже не так, у меня нет идей, sry =/ edit: или это проблема масштабирования, если вы масштабируете изображение при его отображении?