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 이미지 회전

+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를 만드는 것입니다에 눈치 ... 난 당신이 다른 인스턴스 at.concatenate(AffineTransform.getTranslateInstance(dx, dy);를 번역하거나 at.translate(dx, dy)를 사용 ...하지만 기억 AffineTransform at = AffineTransform.getRotateInstance(theta, cx,cy); 하나를 얻기 위해 시도하고 어쩌면 concate 제안 : oyu가 affineTransformation에서 변환을 수행하는 순서는 무엇이 중요합니다. (당신이 [rotate and translate]한다면 translat 회전] - 힌트와 마찬가지로 ...