Things like Arcs cost power ( but maybe there is a way to change the algorithm), it has to use plenty of cos and sin in a single frame.

If you want to have better frame rate , you can draw the arc on a image ( there's one extension to draw on a image). Like this you make only the complex calculation once.

As you can see the arc is plenty of little lines.

public static function drawArc(g:G, x:Float, y:Float, s:Float, e:Float, r:Float) {

var tempx1:Float;

var tempy1:Float;

var tempx2:Float;

var tempy2:Float;

while (s < -180) { s += 360; e += 360; }

while (s > 540) { s -= 360; e -= 360; }

while (e < -180) { e += 360; }

while (e > 540) { e -= 360; }

if (s % 1 != 0) {

tempx1 = x + (r * Math.cos(s * Utils.RAD));

tempy1 = y + (r * Math.sin(s * Utils.RAD));

tempx2 = x + (r * Math.cos(Math.ceil(s) * Utils.RAD));

tempy2 = y + (r * Math.sin(Math.ceil(s) * Utils.RAD));

g.drawLine(tempx1, tempy1, tempx2, tempy2);

}

for (i in -180...540) {

if ((s <= i) && (i + 1 <= e)) {

tempx1 = x + (r * Math.cos(i * Utils.RAD));

tempy1 = y + (r * Math.sin(i * Utils.RAD));

tempx2 = x + (r * Math.cos((i + 1) * Utils.RAD));

tempy2 = y + (r * Math.sin((i + 1) * Utils.RAD));

g.drawLine(tempx1, tempy1, tempx2, tempy2);

}

}

if (e % 1 != 0) {

tempx1 = x + (r * Math.cos(Math.floor(e) * Utils.RAD));

tempy1 = y + (r * Math.sin(Math.floor(e) * Utils.RAD));

tempx2 = x + (r * Math.cos(e * Utils.RAD));

tempy2 = y + (r * Math.sin(e * Utils.RAD));

g.drawLine(tempx1, tempy1, tempx2, tempy2);

}

}