中国教程网论坛's Archiver

cao4811 发表于 2009-5-8 08:08

AS3 — 3D旋转[本文已收录教程库]

[i=s] 本帖最后由 xyl7422 于 2009-8-25 18:32 编辑 [/i]

效果演示:
[swf]http://bbs.jcwcn.com/attachments/month_0905/0905080808fef75a71a4e790b2.swf[/swf]

〖本教程着重于代码的编写,版本AS 3.0。图形元件的制作不作讲解,请参看有关教程。〗
1、新建Flash文档,创建5 个图形,(或导入5张图片到库中)。

2、创建一个影片剪辑,1层为图片层2层为代码层。在1层把5张图片分别放在5帧中,在代码层输入stop();  如图:[attach]1129930[/attach]

3、Ctrl + L 打开库,右键单击影片剪辑实例做链接,类名为:IconMenu  如图:
[attach]1129931[/attach]
4、返回场景1,图层1为背景层,图层2为代码层。在图层1导入背景图片。图层2输入代码:[code]include "Math2.as"
//图片容器
var menu:Sprite=new Sprite();
//使图标移动
menu.x = 300;
menu.y = 200;
//注册事件侦听器
menu.addEventListener(Event.ENTER_FRAME,moveMenu);
this.addChild(menu);
//椭圆在x 和y 轴上的截距
var disx:Number = 200;
var disy:Number = 10;
//旋转速度
var speed:Number = 0;
initMenu(5);
function initMenu(n:int) {
        for (var i:int; i<n; i++) {
                var mc:MovieClip = new IconMenu();
                //缩小图标
                mc.scaleX = mc.scaleY = .5;
                menu.addChild(mc);
        }
}
//事件侦听器函数
function moveMenu(e:Event):void {
        //获取图标数
        var iconCount:int = menu.numChildren;
        //定义数组
        var depthArray:Array = new Array();
        //把360度平分
        var angle:Number = 360 / iconCount;
        for (var z:int; z<iconCount; z++) {
                //根据深度获取图标
                var mc:MovieClip = menu.getChildAt(z);
                //跳转到不同帧,来显示不同的图标
                mc.gotoAndStop(z+1);
                //设置图标的位置
                mc.x = cosD(speed + angle*z) * disx;
                mc.y = sinD(speed + angle*z) * disy;
                setProp(mc,"alpha");
                setProp(mc,"scaleX",.2,.7);
                setProp(mc,"scaleY",.2,.7);
                //保存图标到数组
                depthArray[z] = mc;
        }
        //重新设置图标的深度
        arrange(depthArray);
        speed += 2;
}
function arrange(depthArray:Array):void {
        //按照y坐标排序
        depthArray.sortOn("y", Array.NUMERIC);
        var i:int = depthArray.length;
        while (i--) {
                menu.setChildIndex(depthArray[i], i);
        }
}
function setProp(mc:MovieClip,prop:String,n1:Number = .5, n2:Number = 1):void {
        mc[prop] = ((mc.y + 2 * disy) / disy - 1) / 2 * (n2 - n1) + n1;
}
[/code]5、新建.as文档,保存名为:Math2.as (这个文档是进行三角函数的计算)
输入代码:[code]//角度转弧度
function angleToRadian(angle:Number):Number
{
        return angle*(Math.PI/180);
}
//弧度转角度
function radianToAngle(radian:Number):Number
{
        return radian*(180/Math.PI);
}
//计算正弦值
function sinD(angle:Number):Number
{
        return Math.sin(angleToRadian(angle));
}
//计算余弦值
function cosD(angle:Number):Number
{
        return Math.cos(angleToRadian(angle));
}
//计算反正切
function atan2D(y:Number, x:Number):Number
{
        return radianToAngle(Math.atan2(y, x));
}
[/code]把fla文档与Math2.as 文档保存在同一目录下,进行测试。
[swf]http://bbs.jcwcn.com/attachments/month_0905/0905080808fef75a71a4e790b2.swf[/swf]

jellyq 发表于 2009-5-9 15:57

:jc:yiwen教程不错。34行代码var mc:MovieClip = menu.getChildAt(z);会报错
查了下,改成 var mc:MovieClip = menu.getChildAt(z)[color=Orange]as MovieClip[/color];就好了

cao4811 发表于 2009-5-9 20:50

[b] [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=5380557&ptid=244777]2#[/url] [i]jellyq[/i] [/b]


真不错,出现编译器报错进行研究,并找到解决问题的办法,这种学习的态度值得赞赏。这是一个强制的类型转换,有两种解决的办法,一种是用as运算符进行类型转换,另一种是选择【文件】—【发布设置】命令,打开【发布设置】对话框,选Falsh选项卡,单击ActionScript版本下拉列表框后的【设置】按钮,在弹出的设置面板中,不选中【严谨模式】复选框,问题就会解决。在编写代码时,首先把严谨模式去掉,会省去很多的麻烦,你可以试一下,谢谢你的回帖。

q615821 发表于 2009-9-22 15:39

好像很难啊 中文的也是直接复制粘贴?

nxasd 发表于 2009-9-22 17:18

[i=s] 本帖最后由 zctmh0336 于 2009-9-22 17:28 编辑 [/i]

交作业了。
[swf]http://bbs.jcwcn.com/attachments/month_0909/0909221727706d064c6405874a.swf[/swf]

傻影子让我换ID 发表于 2009-9-22 21:49

[i=s] 本帖最后由 傻影子让我换ID 于 2009-9-22 21:52 编辑 [/i]

这个真好!
跟着做一个,就是不知道代码的具体意思!

[swf]http://bbs.jcwcn.com/attachments/month_0909/0909222149f48c4ba65ba33b96.swf[/swf]

xy-men 发表于 2009-10-3 15:21

你这个具体步骤是怎样的能发个图文教程我么视频就更好了?

从天而降 发表于 2009-10-7 23:46

做好了,交上作业!

xiaohewenxiao 发表于 2009-10-17 11:26

我今年才开始学flash,这些还没能看明白呢?呜呜~~~

sanbos 发表于 2009-10-17 20:17

8楼的作业:
[swf]http://bbs.jcwcn.com/attachments/month_0910/0910072346e9e1def7e21d9109.swf[/swf]

man5wide 发表于 2009-10-29 17:54

学习学习了

dl127 发表于 2009-10-29 22:19

我也做出来了 不过不知道怎么交作业

zctmh0336 发表于 2009-10-30 08:32

[b] [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=6112714&ptid=244777]12#[/url] [i]dl127[/i] [/b]
看下此帖子:[url]http://bbs.jcwcn.com/thread-215569-1-1.html[/url]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.