2014-09-24 4 views
0
@Override 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     Graphics2D g2=(Graphics2D) g.create(); 

     //rotation of player 
     if(player.newDirection) 
     { 
      int rotationX=player.getImage().getWidth(null)/2; 
      int rotationY=player.getImage().getHeight(null)/2; 

      AffineTransform at=new AffineTransform(); 




       if(player.direction==LEFT) 
       { 
        //graphics.rotate(Math.toRadians(90),bufferedImage.getWidth()/2,bufferedImage.getHeight()/2); 
        //graphics.drawImage(player.getImage(), player.getX(), player.getY(), null); 
        at.setToRotation(Math.toRadians(45), rotationX, rotationY); 
        g2.setTransform(at); 
        g2.drawImage(player.getImage(),player.getX(),player.getY(),null); 
        g2.dispose(); 
        System.out.println("sola"); 
       } 

Я пытаюсь повернуть изображение игрока, но он не работает. В чем проблема?Java Rotate Image

+1

Какие результаты у вас есть? «Это не работает» не очень описательно. –

ответ

1

Я думаю, что я понимаю вашу проблему.

Вращение производится вокруг (0, 0) точки, поэтому, если вы печатаете изображение в середине экрана, оно будет отображаться очень далеко от того, что вы думаете.

Для того, чтобы все работало должным образом, нарисуйте изображение так, чтобы центр изображения был в (0, 0), а затем перевел его.

Таким образом, вы могли бы сделать преобразование, как так: - Перевести так, что изображение центра (0, 0) - Поворот изображения - Перевести изображение обратно в нужную точку

0

вы могли бы рассмотреть две другие вещи при использовании подтвержденного преобразования ...

, когда вы вводите код g2.setTransform(at);, вы должны быть очень осторожны, потому что теперь вы устанавливаете affirmTransform для всей своей графики! (См http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html#setTransform%28java.awt.geom.AffineTransform%29: он говорит: «Этот метод должен никогда использоваться для применения нового преобразования координат поверх существующего преобразования ...»), так что не делать какие-либо ошибки там ...

лучше использования g2.drawImage(Image, at, ImageObserver), как заметил на http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

другой распространенной ошибкой является создание «неправильный» startOf-AffirmeTransform ... я предлагаю вам попытаться получить один за AffineTransform at = AffineTransform.getRotateInstance(theta, cx,cy); и, возможно, concate другой перевод экземпляра at.concatenate(AffineTransform.getTranslateInstance(dx, dy); или просто использовать at.translate(dx, dy) ... но помните, : важно, чтобы в каком порядке выполнялись преобразования на вашей аффинной трансформации (ее отличие, если вы [повернуть, а затем перевести] или [перевести а затем поверните] - точно так же, как подсказка) ...