Obecnie próbuję narysować obrazy na ekranie z normalną szybkością, jak w grze wideo.Rysowanie obrazu przy użyciu dokładności na poziomie subpikseli przy użyciu Graphics2D
Niestety, ze względu na szybkość, z jaką obraz się porusza, niektóre klatki są identyczne, ponieważ obraz nie przesunął jeszcze pełnego piksela.
Czy istnieje sposób dostarczenia wartości float
do Graphics2D dla pozycji na ekranie w celu narysowania obrazu zamiast wartości int
?
Początkowo oto co zrobiłem:
BufferedImage srcImage = sprite.getImage ();
Position imagePosition = ... ; //Defined elsewhere
g.drawImage (srcImage, (int) imagePosition.getX(), (int) imagePosition.getY());
Ten progów Oczywiście, dzięki czemu obraz nie porusza się między pikselami, ale przeskakuje z jednego do następnego.
Następną metodą było ustawienie koloru farby na teksturę i rysowanie w określonej pozycji. Niestety, spowodowało to niepoprawne wyniki, które pokazały układanie płytek zamiast prawidłowego wygładzania krawędzi.
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());
Co należy zrobić, aby osiągnąć pożądany efekt renderowania subpikselowych obrazów w języku Java?
Hej Lawren! Dziękuję za odpowiedź. Dziękuję bardzo za pokazanie mi, jak to zrobić! –
dlaczego t.scale (1, 1); ?? AFAIK, że instrukcja nic nie robi? (w skali do rzeczywistego rozmiaru?) – pakore