#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: или это проблема масштабирования, если вы масштабируете изображение при его отображении?