Я сейчас пытаюсь рисовать изображения на экране с обычной скоростью, как в видеоигре.
К сожалению, из-за скорости, с которой изображение движется, некоторые кадры идентичны, потому что изображение еще не переместилось на полный пиксель.
Есть ли способ предоставить 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?