Web DevCenter
oreilly.comSafari Books Online.Conferences.
MySQL Conference and Expo April 14-17, 2008, Santa Clara, CA

Sponsored Developer Resources

Web Columns
Adobe GoLive
Essential JavaScript
Megnut

Web Topics
All Articles
Browsers
ColdFusion
CSS
Database
Flash
Graphics
HTML/XHTML/DHTML
Scripting Languages
Tools
Weblogs

Atom 1.0 Feed RSS 1.0 Feed RSS 2.0 Feed

Learning Lab






PHP Powers FreeMovie API for Flash
Pages: 1, 2

Basic Shape Toolbox

The FreeMovieCompilerToolbox defines the following basic empty shapes:



  • Straight line
    DefineStraightLine($X1, $Y1, $X2, $Y2, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Triangle
    DefineTriangle($X1, $Y1, $X2, $Y2, $X3, $Y3, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Rectangle
    DefineRectangle($X1, $Y1, $X2, $Y2, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Regular Polygon
    DefinePolygon($Segments, $X1, $Y1, $Radius, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Bezier Quad Curve (two)
    DefineBezierQuad($Accuracy, $X1, $Y1, $ControlX, $ControlY, $X2, $Y2, $Width, $AlphaFlag, $R, $G, $B, $A)
    DefineCurvedLine($X1, $Y1, $ControlX, $ControlY, $X2, $Y2, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Bezier Cubic Curve
    DefineBezierCubic($Accuracy, $X1, $Y1, $ControlX1, $ControlY1, $ControlX2, $ControlY2, $X2, $Y2, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Circle
    DefineCircle($Accuracy, $X1, $Y1, $Radius, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Arc
    DefineArc($Accuracy, $X1, $Y1, $Angle1, $Angle2, $Radius, $Width, $AlphaFlag, $R, $G, $B, $A)
  • Closed Arc
    DefineArcClosed($Accuracy, $X1, $Y1, $Angle1, $Angle2, $Radius, $Width, $AlphaFlag, $R, $G, $B, $A)

The meanings of the arguments used in these functions are as follows:

  • X and Y coordinates control positioning of start, end, or center points of shapes. The numeric index indicates the order in which points are arranged in the shape.
  • ControlX and ControlY coordinates control the positioning of curve control points.
  • Width controls the width of the shape outline.
  • Accuracy defines the number of segments used to construct arcs, circles, or curves.
  • Radius controls the radius of polygons, arcs, and circles.
  • Angle controls the from and to angles of arcs (Angle1 and Angle2 respectively).
  • R, G, B, and A control the red, green, blue, and alpha channel (transparency) settings for the shape color. The value of A is considered only when AlphaFlag is set to true.
  • Segments defines the number of segments used to construct polygons.

Careful readers will notice that there are two functions for drawing second-degree Bezier curves: DefineBezierQuad() and DefineCurvedLine(). DefineCurvedLine() creates curves which are always smooth, while DefineBezierQuad() creates curves with varying degrees of smoothness. Also, the third-degree Bezier curves can be drawn with a varying degree of accuracy.

To see a full set of basic non-filled shapes and learn how they are defined in FreeMovie fashion, the readers are encouraged to study the following example. The results should be similar to the drawing shown in the figure below, after the code listing.

<?php
header("Content-Type: application/x-shockwave-flash");

//-----------------------------------------------------//
// the header() function must _always_ be called first //
//-----------------------------------------------------//

//-------------------------------------------------------
// import the FreeMovieCompilerTollbox

require_once("freemoviecompilertoolbox.php");

//-------------------------------------------------------
// initialize new SWF object.

$swf = new FreeMovieCompilerToolbox;

//-------------------------------------------------------
// set the global parameters of your movie
// frame size is in twips (1 twip = 20 pixels)

$swf->SetSWFVersion(5);
$swf->SetFrameSize(16000, 12000); // = 800 x 20, 600 x 20
$swf->SetFrameRate(24.0);
$swf->SetBackgroundColor(255, 255, 255);

//-------------------------------------------------------
// lights! camera! action!

$swf->BeginMovie();

//-------------------------------------------------------
// frame # 00000

$CharacterInfo = $swf->DefineStraightLine(2000, 8000, 4000, 10000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);
$CharacterInfo = $swf->DefineStraightLine(2000, 10000, 4000, 8000, 300, true, 255, 0, 0, 128);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineTriangle(6000, 8000, 8000, 10000, 10000, 8000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineRectangle(12000, 8000, 14000, 10000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefinePolygon(5, 3000, 6000, 1000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineBezierQuad(17, 6000, 5000, 8000, 9000, 10000, 5000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineBezierCubic(17, 12000, 5000, 12000, 7000, 14000, 5000, 14000, 7000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineCurvedLine(2000, 2000, 3000, 6000, 4000, 2000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineCircle(17, 6500, 3000, 1000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineArc(17, 10000, 3000, 0, 1.5 * pi(), 1000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

$CharacterInfo = $swf->DefineArcClosed(17, 13000, 3000, 0, 1.5 * pi(), 1000, 300, false, 0, 0, 0, 0);
$CharacterDepth = $swf->EasyPlaceObject($CharacterInfo["CharacterID"]);

//-------------------------------------------------------
// end frame # 00000

$swf->EndFrame();

//-------------------------------------------------------
// That's it, Folks!

$swf->EndMovie();

//-------------------------------------------------------
// send movie to the browser

print $swf->GetMovie();

exit;
?>


Final Thoughts

As you can see, even though FreeMovie is a new kid on the block, it has some powerful abilities. I hope to show you other functions such as solid and gradient fills in a future article.

Jacek Artymiak started his adventure with computers in 1986 with Sinclair ZX Spectrum. He's been using various commercial and Open Source Unix systems since 1991. Today, Jacek runs devGuide.net, writes and teaches about Open Source software and security, and tries to make things happen.


Return to the Web Development DevCenter.