В настоящее время я пытаюсь рисовать изображения на экране по обычной цене, как в видеоигре.Рисование изображения с использованием точности подпиксельного уровня с использованием Graphics2D
К сожалению, из-за скорости, с которой движется изображение, некоторые кадры идентичны, поскольку изображение еще не переместило полный пиксель.
Есть ли способ предоставить float
значениям в Graphics2D для отображения на экране изображения, а не int
значений?
Первоначально вот что я сделал:
BufferedImage srcImage = sprite.getImage ();
Position imagePosition = ... ; //Defined elsewhere
g.drawImage (srcImage, (int) imagePosition.getX(), (int) imagePosition.getY());
Это, конечно, порогов, поэтому картинка не перемещается между пикселями, но скачками от одного к другому.
Следующим методом было установить цвет краски на текстуру и нарисовать в указанной позиции. К сожалению, это привело к неправильным результатам, которые показывали черепицу, а не правильное сглаживание.
g.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
BufferedImage srcImage = sprite.getImage ();
g.setPaint (new TexturePaint (srcImage, new Rectangle2D.Float (0, 0, srcImage.getWidth (), srcImage.getHeight ())));
AffineTransform xform = new AffineTransform ();
xform.setToIdentity ();
xform.translate (onScreenPos.getX (), onScreenPos.getY ());
g.transform (xform);
g.fillRect(0, 0, srcImage.getWidth(), srcImage.getHeight());
Что мне делать для достижения желаемого эффекта субпиксельной визуализации изображения на Java?
Эй, Лоурен! Спасибо, что ответили. Большое вам спасибо за то, что вы показали мне, как это сделать! –
почему t.scale (1, 1); ?? AFAIK, что инструкция ничего не делает? (масштаб до его фактического размера?) – pakore