一聚教程网:一个值得你收藏的教程网站

热门教程

一个3d组件制作的过程

时间:2022-07-02 17:18:03 编辑:袖梨 来源:一聚教程网

其实做组件也不难,只要你跟着我一步一步的就好了,我在这里做的是一个旋转的3d的组件.
1.首先得打开flash(必须是flash8),因为用到BitmapData类,新建一个魔方的影片剪辑元件,在第一帧加入以下代码,这段代码的含义就不考究了,我主要将如何利用这段代码做成想要的组件,然后注意我注释的地方:
Stage.scaleMode = 'noScale';
var rotations = {x:0, y:0, z:0};
//这个dis要作为组件的一个参数,是正方体的边长,在这里没给出它的数值,做成组件后在组件参数里设置它的值
var boxPoints = [{x:-dis, y:-dis, z:-dis}, {x:dis, y:dis, z:-dis}, {x:-dis, y:dis, z:-dis}, {x:-dis, y:-dis, z:dis}, {x:dis, y:-dis, z:dis}, {x:dis, y:dis, z:dis}];
this.createEmptyMovieClip("theScene", 1);
//position是正方体的坐标,决定了正方体在舞台的位置,也作为组件的一个参数
theScene._x = theScene._y=position;
createImages();
theScene.onEnterFrame = function() {
//a和b是正方体随鼠标旋转的速度,也是组件的俩个参数
rotations.x -= this._ymouse/a;
rotations.y += this._xmouse/b;
var points2d = pointsTransform(boxPoints, rotations);
movieClip3PointTransform(this.image0, points2d[2], points2d[0], points2d[3]);
movieClip3PointTransform(this.image1, points2d[5], points2d[1], points2d[2]);
movieClip3PointTransform(this.image2, points2d[0], points2d[2], points2d[1]);
movieClip3PointTransform(this.image3, points2d[4], points2d[3], points2d[0]);
movieClip3PointTransform(this.image4, points2d[3], points2d[4], points2d[5]);
movieClip3PointTransform(this.image5, points2d[1], points2d[5], points2d[4]);
};
function createImages() {
var i = 6;
while (i--) {
  theScene.createEmptyMovieClip("image"+i, i);  
  theScene["image"+i].createEmptyMovieClip("contents", i);
  theScene["image"+i].contents.attachBitmap(flash.display.BitmapData.loadBitmap("image"+i), 1, false, true);
}
}
function pointsTransform(points, rotations) {
var tpoints = new Array();
var sx = Math.sin(rotations.x);
var cx = Math.cos(rotations.x);
var sy = Math.sin(rotations.y);
var cy = Math.cos(rotations.y);
var sz = Math.sin(rotations.z);
var cz = Math.cos(rotations.z);
var x, y, z, xy, xz, yx, yz, zx, zy;
var i = points.length;
while (i--) {
  x = points.x;
  y = points.y;
  z = points.z;
  xy = cx*y-sx*z;
  xz = sx*y+cx*z;
  yz = cy*xz-sy*x;
  yx = sy*xz+cy*x;
  zx = cz*yx-sz*xy;
  zy = sz*yx+cz*xy;
  tpoints = {x:zx, y:zy};
}
return tpoints;
}
function movieClip3PointTransform(mc, a, b, c) {
mc._visible = pointsIsVisible(a, b, c);
if (!mc._visible) {
  return;
}
var m = mc.transform.matrix;
m.tx = b.x;
m.ty = b.y;
m.a = (a.x-b.x)/mc.contents._width;
m.b = (a.y-b.y)/mc.contents._width;
m.c = (c.x-b.x)/mc.contents._height;
m.d = (c.y-b.y)/mc.contents._height;
mc.transform.matrix = m;
}
function pointsIsVisible(a, b, c) {
var db = b.x-a.x;
if (!db) {
  return (a.y>b.y == c.x>a.x);
}
var dc = c.x-a.x;
if (!dc) {
  return (a.y>c.y == b.x }
return ((b.y-a.y)/db<(c.y-a.y)/dc) != (a.xc.x);
}
其它的地方就不要管了,总共四个参数。然后打开库面板,右键点击该元件,选组件定义,将上面的四个参数添加进去,如下:
      名称          变量            值            类型
      dis                            70          Number
       a                             1000        Number
       b                             1000        Number
    position                      200          Number
这样组件就初步成功了,然后把它拖入主场景里,左对齐。上对齐到舞台,选中该实例,发现它的名字变为组件了,然后在参数面板里也有了以上设置的东西了,接下来导入六张图片(图片一定不能太大,否则cpu会吃不消),链接名为image0到image5,按ctrl+enter测试影片,如果你觉得有什么地方不合适,可以调整参数。

第一步完成了,但是你的组件只能在这个文件里被你用,如果你想什么时候想用就用,并且其他人也可以用就得做成mxp文件,然后其他人下载后也可以安装;
首先还是打开库面板,右键点击该组件,现在已经成为组件了,选导出swc文件,以mofang.swc为名;
然后再建一个组件安装文件,新建一个文本文当,加入以下代码。同样不要管它的意思,只是个公式,会套就行





//我的资料










www.flash8.com
e-mail:haofeng_guo@sina.com]]>
//这是我把我的资料加进去,你可以换成你的




//对该组件的描述






//mofang.swc是我的swc文件的名字


然后把它保存为mofang.mxi的文件,记得把我的注释去掉!要和mofang.swc文件保存在同一目录下,然后打开该mxi文件,生成mofang.mxp文件,这个是自动的,按提示操作就行了,当然你必须安装有Macromedia Extension Manager。
现在组件就成功了,这个mofang.mxp文件就可以在任何flash中安装了
下面是我的swf文件和mxp文件,如果你不想做mxi文件和swc文件也有现成的,你可以下载我的。mxp文件下载后可以直接安装,怎么安装我就不讲了,瞌睡了,先到这里吧,有什么不明白的地方可以尽管发问。

来自flash8.

热门栏目