# Drawing arcs with AS3

If you have ever tried to draw arcs with AS3 (or AS2), you probably smashed your computer on the floor after spending hours with curveTo().

That’s not what we need when we want to draw simple arcs, without any Bezier curve.

That’s why I made my own function.

It’s not that interesting since it only uses a bit of trigonometry, and obviously I did not write it for the sake of writing a function, but at the moment with this script

```package {
import flash.display.Sprite;
public class arc extends Sprite {
var my_canvas:Sprite = new Sprite();
public function arc() {
my_canvas.graphics.lineStyle(20,0xff0000,1);
draw_arc(my_canvas,250,200,150,14,180,1);
}
var angle_diff=angle_to-angle_from;
var steps=Math.round(angle_diff*precision);
var angle=angle_from;
movieclip.graphics.moveTo(px,py);
for (var i:int=1; i<=steps; i++) {
angle=angle_from+angle_diff/steps*i;
}
}
}
}```

you get this result:

An arc from degree 14 to degree 180. It's easy and simple and uses trigonometry (check this old tutorial if you think it's a brain disease)

But the final application is a power meter like the one used in Pumpkin Story, and here it is, with a bit of the previous script and a bit of Flash artillery.

```package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class arc extends Sprite {
var my_canvas:Sprite = new Sprite();
var charging:Boolean=false;
var power:int=0;
public function arc() {
}
var angle_diff=angle_to-angle_from;
var steps=Math.round(angle_diff*precision);
var angle=angle_from;
movieclip.graphics.moveTo(px,py);
for (var i:int=1; i<=steps; i++) {
angle=angle_from+angle_diff/steps*i;
}
}
public function charge(e:MouseEvent) {
charging=true;
}
public function shoot(e:MouseEvent) {
charging=false;
my_canvas.graphics.clear();
power=0;
}
public function on_enter_frame(e:Event) {
if (charging) {
power++;
if (power>=120) {
power-=120;
}
my_canvas.graphics.clear();
my_canvas.graphics.lineStyle(20,0x000000,1);
draw_arc(my_canvas,250,200,150,270,270+power*3,1);
}
}
}
}```

And this is the result:

Press and hold the mouse to charge the power, release to reset.

Next time, a real-world application of this principle

214 GAME PROTOTYPES EXPLAINED WITH SOURCE CODE
// 1+2=3
// 10000000
// 2 Cars
// 2048
// Avoider
// Ballz
// Block it
// Blockage
// Bloons
// Boids
// Bombuzal
// Breakout
// Bricks
// Columns
// CubesOut
// Dots
// DROP'd
// Dudeski
// Eskiv
// Filler
// Fling
// Globe
// HookPod
// Hundreds
// InkTd
// Iromeku
// Lumines
// Magick
// MagOrMin
// Maze
// Memdot
// Nano War
// Nodes
// o:anquan
// Ononmin
// Pacco
// Phyballs
// Platform
// Poker
// Pool
// Poux
// Pudi
// qomp
// Racing
// Renju
// SameGame
// Security
// Sling
// Slingy
// Sokoban
// Splitter
// Sproing
// Stack
// Stringy
// Sudoku
// Tetris
// Threes
// Toony
// Turn
// TwinSpin
// vvvvvv
// Wordle
// Worms
// Yanga
// Zhed
// zNumbers