[Flashcoders] Re: AS3: Rotating menu - looking for advice with 3 issues

2009-01-10 Thread Alexander Farber
Oh, actually I don't need mouseDown and can:

private function handleMouseDown(event:MouseEvent):void {
removeEventListener(Event.ENTER_FRAME, handleEnterFrame);
}

private function handleMouseUp(event:MouseEvent):void {
addEventListener(Event.ENTER_FRAME, handleEnterFrame);
}

private function handleMouseOut(event:MouseEvent):void {
addEventListener(Event.ENTER_FRAME, handleEnterFrame);
}


On Sat, Jan 10, 2009 at 7:45 PM, Alexander Farber
 set a variable on mouse click and stop rotating.

___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders


[Flashcoders] Re: AS3: Rotating menu - looking for advice with 3 issues

2009-01-10 Thread Alexander Farber
I've figured out how to sort depths
(added an Array for them) + set
a variable on mouse click and stop rotating.

Here is my rotating menu for the archives

(one thing I still don't like is that because
the objects on the bottom are scaled down
the angle between them seems too big)

package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;

public class RotMenu extends Sprite {
public static const W:uint = 120;
public static const H:uint = 80;
public static const R:uint = 32;

public static const BLUR:BlurFilter = new BlurFilter(2, 2, 
1);
private static constSHADOW:DropShadowFilter = new 
DropShadowFilter(8,
80, 0x00, 0.4, 32, 32, 1, 1, false, false, false);

private static var  A:Number;
private static var  B:Number;
private static constGR:Number = Math.PI / 180;

private var start:Number = 0;
private var delta:Number = 0;
private var depths:Array;
private static var  mouseDown:Boolean;

public function RotMenu(total:uint) {
depths = new Array(total);
delta = Math.min(60, 360 / total);

for (var i:uint = 0; i  total; i++) {
var rect:Sprite = new Sprite();
// do not show the rect before its coordinates
// have been set by handleEnterFrame()
rect.visible = false;
rect.graphics.lineStyle(4, 0x4F69B5);
rect.graphics.drawRoundRect(-W/2, -H/2, W, H, 
R);
rect.graphics.lineStyle(2, 0x91BCE5);
rect.graphics.beginFill(0xA3DD8E);
rect.graphics.drawRoundRect(-W/2, -H/2, W, H, 
R);
rect.graphics.endFill();
rect.tabIndex = i;
addChild(rect);
depths[i] = rect;
}

addEventListener(Event.ADDED_TO_STAGE, handleAdded);
addEventListener(Event.ENTER_FRAME, handleEnterFrame);
addEventListener(MouseEvent.MOUSE_DOWN, 
handleMouseDown);
addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut);
}

private function handleMouseDown(event:MouseEvent):void {
mouseDown = true;
}

private function handleMouseUp(event:MouseEvent):void {
mouseDown = false;
}

private function handleMouseOut(event:MouseEvent):void {
mouseDown = false;
}

private function handleAdded(event:Event):void {
A = Math.min(x, stage.stageWidth - x) - W/2;
B = Math.min(y, stage.stageHeight - y) - H/2 - 8;
}

private function handleEnterFrame(event:Event):void {
// the starting angle - for the 1st rect
if (! mouseDown)
start += mouseX / 100;

for (var i:uint = 0; i  depths.length; i++) {
var rect:Sprite = depths[i];
var angle:Number = start + delta * 
rect.tabIndex;
// scale the rect from (0.70-0.30) to 
(0.70+0.30)
rect.scaleX = rect.scaleY = 0.7 +

0.3 * Math.sin(angle * GR);
rect.x =  A * Math.cos(angle * GR);
rect.y = -B * Math.sin(angle * GR);
rect.filters = (rect.y  16 ?
 [BLUR, SHADOW] : [SHADOW]);
rect.visible = true;
}

depths.sortOn('y', Array.NUMERIC);
for (var i:uint = 0; i  depths.length; i++) {
var rect:Sprite = depths[i];
setChildIndex(rect, 0);
}
}
}
}

And then in the .fla file:

stop();

var rot:RotMenu = new RotMenu(12);
rot.x = stage.stageWidth / 2;
rot.y = stage.stageHeight / 3;
addChild(rot);
___
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders