3D旋转菜单目前好像满火的,正好自己也做了一个,分享一下吧(感谢gotoAndLearn提供视频下载)
先来看看效果吧:click here(忘了做loading了 )
先来说说思路,首先要形成一个椭圆轨迹,这个函数可以这样写
function move_me() {
this._x = s(this.angle)*r_x+c_x;
this._y = Math.sin(this.angle)*r_y+c_y;
this.angle += speed;
ratio = this._y/(r_y+c_y);
this._xscale = this._yscale=ratio*100;
this.swapDepths(ratio*100+100);
}
cos是邻边比斜边,所以对应_x,同理sin对应_y,这里的r_x和r_y分别是在函数外定义的椭圆的x半径和y半径,c_x和c_y是椭圆的中心
for (var i = 0; i<item_num; i++) {
var t:MovieClip = home.attachMovie("item", "item"+i, i+1);
t.angle = (i/item_num)*(Math.PI*2);
}
item_num是先前定义的mc的数量
import mx.utils.Delegate;
ansitions.Tween;
ansitions.easing.*;
var item_num:Number;
var r_x:Number = 350;
var r_y:Number = 125;
var c_x:Number = Stage.width/2;
var c_y:Number = Stage.height/2;
//这个是定义旋转的速度的
var speed:Number = 0.01;
//定义home,相当于_root
var home:MovieClip = this;
//这个将来要显示内容的
theText._visible = false;
//将tooltip从库中载入
var tooltip:MovieClip = this.attachMovie("toolTip", "tooltip", 1000);
var xml:XML = new XML();
xml.ignoreWhite = true;
Load = function() {
icons = xml.firstChild.childNodes;
item_num = icons.length;
for (var i = 0; i<item_num; i++) {
var t:MovieClip = home.attachMovie("item", "item"+i, i+1);
t.angle = (i/item_num)*(Math.PI*2);
t.icon_mc.icon_loader.loadMovie(icons[i].attributes.url);
t.f_loader.loadMovie(icons[i].attributes.url);
t.txt = icons[i].attributes.intro;
t.content = icons[i].t;
t.onEnterFrame = move_me;
t.RollOver = over;
t.RollOut = out;
t.Release = released;
}
};
function released() {
for (var i = 0; i<item_num; i++) {
var t:MovieClip = home["item"+i];
EnterFrame;
delete t.RollOver;
delete t.RollOut;
EnterFrame;
delete t.Release;
speed = 0;
tooltip._x = 8000;
if (t != this._parent) {
var tw:Tween = new Tween(home["item"+i], "_alpha", Strong.easeOut, 100, 0, 1, true);
}
if (this._t.indexOf("|")>-1) {
var tmp_arr:Array = this._t.split("|");
this._t = tmp_arr.join("<br>");
}
this.x = this._parent._x;
this.y = this._parent._y;
this.scale = this._xscale;
var tw2:Tween = new Tween(this._parent, "_x", Regular.easeIn, this._parent._x, 200, .5, true);
var tw3:Tween = new Tween(this._parent, "_y", Regular.easeIn, this._parent._y, 250, .5, true);
var tw4:Tween = new Tween(this._parent, "_xscale", Regular.easeIn, this._parent._xscale, 100, .5, true);
var tw5:Tween = new Tween(this._parent, "_yscale", Regular.easeIn, this._parent._yscale, 100, .5, true);
theText._visible = true;
theText.htmlText = this._t;
var s:Object = this;
MotionStopped = function() {
s.onRelease = unreleased;
};
}
}
function unreleased() {
theText._visible = false;
var tw2:Tween = new Tween(this._parent, "_x", Regular.easeIn, 200, this.x, .5, true);
var tw3:Tween = new Tween(this._parent, "_y", Regular.easeIn, 250, this.y, .5, true);
var tw4:Tween = new Tween(this._parent, "_xscale", Regular.easeIn, 100, this.scale, .5, true);
var tw5:Tween = new Tween(this._parent, "_yscale", Regular.easeIn, 100, this.scale, .5, true);
speed = 0.01;
for (var i = 0; i<item_num; i++) {
var t:MovieClip = home["item"+i];
t.onEnterFrame = move_me;
t.RollOver = over;
t.RollOut = out;
t.Release = released;
if (home["item"+i] != this._parent) {
var tw:Tween = new Tween(t, "_alpha", Strong.easeIn, 0, 100, 1, true);
}
}
}
function over() {
tooltip._x = this._parent._x;
tooltip._y = this._parent._y-this._parent._height/2;
tooltip.NextHighestDepth());
tooltip.tip_txt.htmlText = this._;
EnterFrame = ate(this, moveTip);
}
function moveTip() {
tooltip._x = this._parent._x;
tooltip._y = this._parent._y-this._parent._height/2;
}
function out() {
EnterFrame;
tooltip._x = 8000;
}
xml.load(l");
function move_me() {
this._x = s(this.angle)*r_x+c_x;
this._y = Math.sin(this.angle)*r_y+c_y;
this.angle += speed;
ratio = this._y/(r_y+c_y);
this._xscale = this._yscale=ratio*100;
this.swapDepths(ratio*100+100);
}
MouseMove = function() {
speed = (this._xmouse-c_x)/6000;
};
//这个是为了防止鼠标移走后,旋转的速度太快
var mouseListener:Object = new Object();
MouseMove = function() {
if (home._xmouse>=Stage.width-20) {
speed = 0.01;
EnterFrame;
tooltip._x = 8000;
}
if (home._xmouse<=20) {
speed = -0.01;
EnterFrame;
tooltip._x = 8000;
}
};
Mouse.addListener(mouseListener);
感觉鼠标移出场景和移入场景那块,处理的不是很完美
.html
本文发布于:2024-01-31 09:15:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666373127460.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |