views:

363

answers:

1

Hi all, how can I draw arc in randomize created triangle's angle with flash actionscript 2.0.

Thanks all.alt text

I would like to draw red arc at every triangle's angle. Note: The triangle will be created randomly.

+1  A: 

One simple way would be to draw a circle in each corner, then use a copy of your triangle to mask the circles so only the interior arcs are visible.

For example, make a movieClip in your library named "circle" containing an unfilled red circle centred on the clip's insertion point (make sure you tick "Export for Actionscript" in it's properties).

Then you can draw your triangle something like this:

import flash.geom.Point;

function randomPoint():Point {  //return a random point on the stage
    var p:Point = new Point(Math.floor(Math.random()*Stage.width), Math.floor(Math.random()*Stage.height));
    return p;
}

function drawTriangle(mc:MovieClip, q1:Point, q2:Point, q3:Point):Void {//draw a triangle through 3 points
    var stroke=2;//line weight of triangle
    mc.lineStyle(stroke, 0x000000, 100, true, "none", "round", "round");
    mc.moveTo(q1.x, q1.y);
    mc.lineTo(q2.x, q2.y);
    mc.lineTo(q3.x, q3.y);
    mc.lineTo(q1.x, q1.y);
}

function arcTriangle():MovieClip {  //main function to draw a triangle with corner arcs
    //make a new movieclip t which will hold our triangle parts
    var depth=this.getNextHighestDepth();
    var t:MovieClip = this.createEmptyMovieClip("t"+depth, depth);

    //define 3 random points (stored as properties of t)
    t.p1=randomPoint();
    t.p2=randomPoint();
    t.p3=randomPoint();

    //draw a triangle
    t.createEmptyMovieClip("triangle", 0);
    drawTriangle(t.triangle, t.p1, t.p2, t.p3);

    //draw a filled triangle to use as a mask
    t.createEmptyMovieClip("mask", 1);
    t.mask.beginFill(0xF0F0F0);
    drawTriangle(t.mask, t.p1, t.p2, t.p3);
    t.mask.endFill();
    t.mask._alpha=0;

    //add a red circle to each corner
    t.createEmptyMovieClip("arcHolder", 2);
    t.arcHolder.attachMovie("circle", "arc1",1,{_x:t.p1.x, _y:t.p1.y});
    t.arcHolder.attachMovie("circle", "arc2",2,{_x:t.p2.x, _y:t.p2.y});
    t.arcHolder.attachMovie("circle", "arc3",3,{_x:t.p3.x, _y:t.p3.y});

    //mask the circles so only the interior arcs are visible
    t.arcHolder.setMask(t.mask);

    return t;
}

var myTriangle:MovieClip = arcTriangle();

et voila

Richard Inglis
When I copy and test your code in my Adobe Flash CS 4 Professional version, I can't see red arc. What can it be?
RedsDevils
You need to draw the "circle" symbol by hand, using the circle tool in Flash. To do this, create a new symbol in your library, name it "circle", enable 'Export for Actionscript' in it's properties, and then edit the appearance of the symbol to be a red circle (no fill) maybe 35pixels in diameter, centred on the symbol's insertion point.
Richard Inglis
Here's a solution with code-driven circles, if you need it: http://stackoverflow.com/questions/2572271
Richard Inglis