2017-02-26 81 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