这个3D旋转菜单的代码中,改变深度的函数到底是什么原理?
as3吧
全部回复
仅看楼主
level 1
疾风l 楼主
求助。。。。
这个3D旋转菜单,用来改变深度的函数完全看不懂啊。。。
1、sss.length 为什么会逐个减少?
2、while(i--) 为什么没有要执行的代码块?而且去掉后会提示下面一行的代码缺少Child?
3、为什么我把xuanzhuan函数中的mc.gotoAndStop(z+1);放到了jiashouji函数中,却出现图标不停闪动的情况?
4、menu.setChildIndex(sss[i],i) 这段代码不是将第i个mc放到索引为i的深度么?
2014年06月20日 08点06分 1
level 1
疾风l 楼主
在库中有一个命名为Shouji类的movieclip。这个movieclip里在第一帧写着stop(); 并且从第一帧到第五帧,每一帧都有一张图片。
代码如下:
import flash.display.Sprite;
import flash.display.MovieClip;
var menu:Sprite = new Sprite();
menu.x = 275;
menu.y = 180;
this.addChild(menu);
var disx:Number = 200;
var disy:Number = 30;
var speed:Number = 0;
menu.addEventListener(Event.ENTER_FRAME,xuanzhuan);
jiashouji(5);
function jiashouji(e:Number):void
{
for(var i:int = 0;i<e;i++)
{
var mc:Shouji = new Shouji();
menu.addChild(mc);
}
}
//EnterFrame事件的函数
function xuanzhuan(e:Event):void
{
var sss:Array = new Array();
var b:int = menu.numChildren;
for(var z:int=0;z<b;z++)
{
var fen:Number = 360/b;
var mc = menu.getChildAt(z);
mc.gotoAndStop(z+1);
mc.x = (Math.cos(fen*(Math.PI/180)*(z+1)+speed))*disx;
mc.y = (Math.sin(fen*(Math.PI/180)*(z+1)+speed))*disy;
dx(mc,"scaleX",.2,.7);
dx(mc,"scaleY",.2,.7);
sss[z]=mc;
}
//speed+=(mouseX-275)/275*0.2;
speed+=0.07;
sd(sss);
}
//随着Y轴改变大小
function dx(mc:MovieClip,p:String,n1:Number,n2:Number):void
{
mc[p]=(mc.y+disy)/(2*disy)*(n2-n1)+n1
}
//随着Y轴改变深度
function sd(sss:Array):void
{
sss.sortOn("y",Array.NUMERIC);
var i:int = sss.length;
while(i--)
menu.setChildIndex(sss[i],i);
}
2014年06月20日 08点06分 2
level 1
疾风l 楼主
2014年06月20日 08点06分 3
level 8
你问题真多,而且稀奇古怪我也不懂。
这些东西没必要细究,你会用就行。
宏观这个效果就是xyz或者xy与scale实现的
我相信你自己也能写出来
------来自 爱贴吧HD for Windows8
2014年06月22日 14点06分 4
[泪]我尝试用自己的方法去写出改变深度的代码,但总是各种BUG,根本无法成功。
2014年06月23日 01点06分
level 1
这个例子是不是ActionScript入门到精通这本书的里的。你列出来的代码,是通过数组里的对象的y坐标的对其进行排列,已达到通过y坐标的变化,来改变他们的深度。很简单,手机打字费劲。自己看看帮助文档。很好了解
2014年06月23日 11点06分 5
1