flash on 2009-3-4
package {
import flash.display.Sprite;
public class Tutorial12 extends Sprite {
public function Tutorial12(){
var dock : Dock = new Dock();
dock.x = 150;
dock.y = 180;
addChild(dock);
}
}
}
import flash.display.Sprite;
import flash.events.Event;
import flash.display.SimpleButton;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.events.MouseEvent;
import mx.effects.Tween;
import mx.effects.easing.Quadratic;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.display.Bitmap;
class Dock extends Sprite {
private var iconAry : Array = new Array(10);
private var dockBg : DockBg = new DockBg();
private var dockTop : int = -30;
function Dock(){
addChild(dockBg);
setIcon();
addEventListener(Event.ENTER_FRAME, IconMove);
}
private function IconMove(event:Event) : void {
if(0 < mouseX && mouseX < 300 && dockTop < mouseY && mouseY < 0){
dockTop = -120;
for (var i :int = 0; i < 10; i++){
var distance : int = mouseX - i * 30 - 15;
if(-20 * Math.PI < distance && distance < 20 * Math.PI){
iconAry[i].scaleY += ((1+3*Math.cos(distance/40))
- iconAry[i].scaleY)/1.5;
iconAry[i].scaleX += ((1+3*Math.cos(distance/40))
- iconAry[i].scaleX)/1.5;
iconAry[i].x += (i*30 + 15 - 120*Math.sin(distance/40)
- iconAry[i].x)/1.5;
} else {
iconAry[i].scaleY += (1 - iconAry[i].scaleY)/1.5;
iconAry[i].scaleX += (1 - iconAry[i].scaleX)/1.5;
if(-20 * Math.PI > distance) {
iconAry[i].x += (i*30 + 120 + 25 - iconAry[i].x)/1.5;
} else {
iconAry[i].x += (i*30 - 120 + 5 - iconAry[i].x)/1.5;
}
}
}
} else {
dockTop = -30;
for (i = 0; i < 10; i++){
iconAry[i].scaleY += (1 - iconAry[i].scaleY)/1.5;
iconAry[i].scaleX += (1 - iconAry[i].scaleX)/1.5;
iconAry[i].x += (i*30+15 - iconAry[i].x)/1.5;
}
}
dockBg.x = iconAry[0].x - iconAry[0].width/2;
dockBg.width = iconAry[9].x + iconAry[9].width/2
- (iconAry[0].x - iconAry[0].width/2);
}
private function setIcon():void {
for (var i : int = 0; i < 10; i++){
iconAry[i] = new Icon(i);
iconAry[i].x = i * 30 + 15;
addChild(iconAry[i]);
}
addEventListener(Event.ENTER_FRAME, IconMove);
}
}
class DockBg extends Sprite {
function DockBg() {
graphics.beginFill(0xFFFFFF,0.5);
graphics.drawRect(0,0,300,-30);
graphics.endFill();
}
}
class Icon extends Sprite {
private var icon : SimpleButton = new SimpleButton();
[Embed(source='flash.png')]
private var Image0 : Class;
function Icon(i : int) {
var upImg : Sprite = upIcon();
var overImg : Sprite = upIcon();
var label : TextField = makeLabel(i);
overImg.addChild(label);
icon.upState = upImg;
icon.overState = overImg;
icon.downState = overImg;
icon.useHandCursor = true;
icon.hitTestState = upImg;
addChild(icon);
icon.addEventListener(MouseEvent.MOUSE_DOWN, jumpStart);
}
private function upIcon() : Sprite {
var Img : Sprite = new Sprite();
var bmp : Bitmap = new Image0();
bmp.width = 30;
bmp.height = 30;
bmp.x = -15;
bmp.y = -30;
bmp.smoothing = true;
Img.addChild(bmp);
return Img;
}
private function makeLabel(i : int) : TextField {
var tf : TextField = new TextField();
tf.text = "アイコン" + i;
tf.width = 30;
tf.x = -15;
tf.y = -36;
var fmt:TextFormat = new TextFormat();
fmt.color = 0x000000;
fmt.size = 4;
fmt.align = TextFormatAlign.CENTER;
tf.setTextFormat(fmt);
return tf;
}
private function jumpStart(e:Event):void {
var jump : Tween = new Tween(icon, icon.y, -5, 300, 24);
jump.easingFunction = Quadratic.easeOut;
jump.setTweenHandlers(updateJump, reachTop);
}
private function updateJump(val:Number):void {
icon.y = val;
}
private function reachTop(val:Number):void {
var fall:Tween = new Tween(icon, icon.y, 0, 300, 24);
fall.easingFunction = Quadratic.easeIn;
fall.setTweenHandlers(updateFall, jumpFinish);
}
private function updateFall(val:Number):void {
icon.y = val;
}
private function jumpFinish(val:Number):void {
var URL : String = "javascript:alert('Clicked')";
var request:URLRequest = new URLRequest(URL);
navigateToURL(request,"_self");
}
}