2017-02-26 177 views
0

我試圖製作旋轉的敵人,只是向前移動。玩家完美展現,但由於某些原因,只有當我將旋轉設置爲360或0時,敵人才會顯示,儘管x和y的位置應該像他們應該的那樣移動。Java Graphics2D僅繪製旋轉0/360度

package Game; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 

public class Enemy extends Rectangle implements GameObject { 

    private int speed; 
    private double angle; 

    public Enemy(int x, int y, int w, int h, int speed, int angle) { 
     this.x = x; 
     this.y = y; 
     this.width = w; 
     this.height = h; 
     this.speed = speed; 
     this.angle = Math.toRadians(angle); 
    } 

    @Override 
    public void update(Engine g) { 
     this.x += (speed * (float) Math.cos(angle)); 
     this.y += (speed * (float) Math.sin(angle)); 

     System.out.println(this.x + " " + this.y); 
    } 

    @Override 
    public void render(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(Color.red); 
     g2d.rotate(angle); 
     g2d.fill(this); 
    } 

} 

回答

1

更改您的渲染組件到這個

@Override 
public void render(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(Color.red); 
    g2d.rotate(this.angle); 
    g2d.fill(this); 
    g2d.draw(this); 
    this.render(g); 
} 
+1

這是對'render'方法的遞歸調用 - 如果我不是忽視的東西,那麼這將導致'StackOverflowError'(或至少其他奇怪的行爲)。 – Marco13