我正在用Java制作破砖游戏以获得乐趣。在这个游戏中,蝙蝠是一个围绕圆周的弧形弧。我正在努力使蝙蝠行为正常。 我正在绘制一个来自圆圈上2点的弧线:
public void update(){
if(dir == 1){
angle += 0.05;
}else if(dir == 0){
angle -= 0.05;
}
x0 = a + r * Math.cos(angle);
y0 = b + r * Math.sin(angle);
x1 = a + r * Math.cos(angle - 0.1);
y1 = b + r * Math.sin(angle - 0.1);
}
public void draw(Graphics2D g){
g.setColor(Color.black);
g.fillRect(0, 0, GamePanel.WIDTH, GamePanel.HEIGHT);
int tr = (int)Math.sqrt((x0-a)*(x0-a) + (y0-b)*(y0-b));
int x = (int) (a - tr);
int y = (int) (a - tr);
int width = 2*tr;
int height = 2*tr;
int startAngle = (int) (180/Math.PI*Math.atan2(y0-b, x0-a));
int endAngle = (int) (180/Math.PI*Math.atan2(y1-b, x1-a));
g.setColor(Color.white);
g.drawArc(x, y, width, height, startAngle, endAngle);
}
理论上这应该有效,第二点是从角度稍微进一步产生的,但是弧的长度在大小上变化......?这就是问题所在。
答案 0 :(得分:0)
此声明打破了模式:
int y = (int) (a - tr);
使用
会更有意义int y = (int) (b - tr);
然后就是调用g.drawArc的方式:
g.drawArc(x, y, width, height, startAngle, endAngle);
最后一个参数是弧的角度,所以我想你想要
g.drawArc(x, y, width, height, startAngle, endAngle - startAngle );
甚至可能
g.drawArc(x, y, width, height, startAngle, Math.abs(endAngle - startAngle) );