First time here? First time here? Newsletter Signup Newsletter
651326 Members and growing! | Flash Jobs
Search tutorials
Author: Patrick Mineault | Website: http://dakar.netqcca.com

Movie 3: Pie preloader

So far we've only used the drawing API to draw squares. Certainly there are other things we can draw with it! In this movie we'll create a portion of circle (pie slice) in order to create a pie preloader. It should look something like this in the end:

Here the double arcs on the right represents the percentage of movie loaded (in this case about 45%).

Some background would be useful before presenting the script. Drawing a pie slice turns out to be a pain because it involves curves which are not nearly as simple to work with as lines in the drawing API. Now instead of creating "real" pie slices we will add a series of small triangles with a relative angle between them so as to create a section of a regular polygon. We'll use triangles with a side length greater than the radius of the masked circle and a sharp angle of 3.6 degrees (1/100 of a circle). What we need is a way to transform these angle and radius coordinates to more traditional Cartesian x and y pairs. A diagram will certainly help:

Convince yourself that the following relations hold:

x1 = r*sin(O)
x2 = r*sin(O+dO)
y1 = r*cos(O)
y2 = r*cos(O+dO)

With that in mind we may create our pie preloader. Create a circle with no interior and with a large outline (donut shape). Convert to movie clip (F8), assuring that that you select the center as the registration point (this is very important). Name the instance maskee. Now place it anywhere on the stage.

Select the movie clip and add this action to it (once again, not to the frame but to the clip itself):

onClipEvent(load)
{
  _root.stop();
  dO = 3.6;
  r = 75;
  function addslice(O)
  {
    x1 = r*Math.sin(O*Math.PI/180);
    x2 = r*Math.sin((O+dO)*Math.PI/180);
    y1 = r*Math.cos((O)*Math.PI/180);
    y2 = r*Math.cos((O+dO)*Math.PI/180);
    trace(x1 + ":" + y1);
    with(_root.mask)
    {
      moveTo(0,0);
      beginFill(0x000088);
      lineTo(x1,y1);
      lineTo(x2,y2);
      endFill();
    }
  }
  _root.createEmptyMovieClip("mask",0);
  this.setMask(_root.mask);
  _root.mask._yscale = -100;
  _root.mask._x = this._x;
  _root.mask._y = this._y;
  oldLoaded = 0;
}
onClipEvent(enterFrame)
{
  loaded = Math.ceil(_root.getBytesLoaded()/_root.getBytesTotal()*100);
  for(i = oldLoaded; i < loaded; i++)
  {
    addSlice(dO*i);
  }
  oldLoaded = loaded;
}
» Level Advanced

Added: 2004-03-26
Rating: 8 Votes: 15
(10 being the highest)
» Author
Always looking for a new challenge, I'm going to Senegal this summer to lend my computer skills in a volunteering project. I'm sending you this tutorial as part of my fundraising campaign, see http://dakar.netqcca.com . Enjoy!
» Download
Download the files used in this tutorial.
» Forums
More help? Search our boards for quick answers!

Comments

  • There are no comments yet. Be the first to comment!

  • You must have javascript enabled in order to post comments.

Leave a Comment
  • Your email address will not be published. All fields are required.
Featured Flash FLA
» Author: S.Saipriya
» Title: Flash Fire Effect
» Description: This tutorial explains about how to create Fire Effect in Flash of Actionscript 2.0.I hope this tutorial helps you!
Featured Sound Loops
Image for equalize

Audio Player

» Author: Aidan Crouzet-Pascal
» Title: Falling Star
» Description: This loop is a cool sounding, E minor loop.
Latest Font
» Author: Fábio FAFERS
» Description: I created this font for free use. Everyone can apply it in personal or business texts. Its free, but I want to be communicated in case of business use. Donations are accepted to keep the project of free fonts alive! Thank you all
Featured Sound Fx
Image for equalize

Audio Player

» Author: Brandan Paulin
» Description: Epic sounding loop with Brass, Percussion, Strings and Winds. This is actually part of a Loop Pack called the Coming where you can download the rest of the loops that go with it FREE from my website.