快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

用AS控制MC的倾斜属性

  在FLASH里,MC的倾斜属性可以通过手动的办法来设定.在FLASH里,倾斜是实现3D效果的重要方面.但是AS里头就没有倾斜属性的代码,尽管现在模仿3D的代码已经有很多人做出来,但是目前一般都是局限在坐标点的模仿方面.对于物体,位图的简朴3D效果,哪怕就一个倾斜,AS都还没能做到.为了解决这个问题(这问题,经典里一位用户也曾问过),本人花了近一周的时间来研究:废话少说,还是转入正题吧.
  1一个简朴的试验:

  在FLASH里,画一个矩形(不要转成元件),然后把该矩形稍作旋转.接着把转了的矩形在水平方向做一下缩放,你就看到矩行实际上是倾斜了.因此,利用AS里的_XSCALE和_ROTATION属性就可以让MC动态地倾斜了.

  2把该试验应用到AS中

  不妨写个代码试试看:
 制作一个MC(越复杂可能效果会越明显)
  往MC里写代码:

onClipEvent(enterFrame){
_rotation=30;
_xscale=30;
}

  测试一下,没有倾斜效果,仔细看一下会发现在MC旋转以后,缩放的坐标也跟着旋转.
  可惜啊!

  难道就没有办法了吗?答案是否定的!既然MC旋转以后,缩放坐标跟着旋转,那么,我们就把旋转了的MC再转为MC,那么不就有两个坐标系了吗?不就可以达到小测试的效果吗?笔者也许比较笨,这个小问题也给卡住了3分钟.言归正传,我们继承说吧.把刚才的MC的代码清空,命名为myMC,然后把他转变为影片剪辑.往转变了的影片剪辑输入代码:

onClipEvent(load){
myMC._rotation=30
_xscale=30
}

  再测试一下,倾斜效果出来了!
  笔者以为这样就可以大功告成,想自己动态设置MC倾斜30度,却发现,上述的代码虽然是倾斜了,但是倾斜并不是30度,上面两个属性跟倾斜属性还存在着对笔者来说是比较复杂的数学关系.笔者花了近一周的时间研究这种关系,尽管有点晕,但最终还是给弄出来了.把上面的代码替换为:

onClipEvent (load) {
    function setSkewx(anglex) {
        var angx = anglex%360;
        var tx = 1/Math.tan(angx*(Math.PI/180));
        var alfax = (Math.tan(angx*(Math.PI/180)) == 0) ? Math.PI/2 : (Math.asin((Math.sqrt(tx*tx+1)-1)/tx));
        myMC._rotation = -45;
        _xscale = 100*Math.sin(alfax);
        myMC._xscale = 100/Math.sqrt(1/2*(Math.pow(Math.sin(alfax), 2)+1));
        myMC._yscale = 100/Math.sqrt(1/2*(Math.pow(Math.sin(alfax), 2)+1));
        _rotation = Math.atan(1/Math.sin(alfax))/(Math.PI/180);
        if (Math.cos(angx*(Math.PI/180))<0) {
            myMC._yscale *= -1;
        }
    }
    function setSkew(anglex, angley) {
        setSkewx(anglex-angley);
        _rotation += angley;
    }
}
onClipEvent (enterFrame) {
    an = (an+1)%360;
    setSkew(an,0)
}

  就看到效果了.

  从前面的简朴测试,到写成这段代码,可谓艰辛至极.但不管怎样也好,代码写成了,也希望能让大家从中学到一些东西.至于从简朴的测试代码到上面的代码是怎么推出来的,里头的语句意义何在,我将在这段时间给大家作出解释.


返回类别: Flash教程
上一教程: FLASH:trace()语句无效之解决办法
下一教程: FlashMX 视频教程(35)-变形动画

您可以阅读与"用AS控制MC的倾斜属性"相关的教程:
· Flash AS游戏教程:人物及控制
· Flash Action控制的鼠标弹性指针效果
· Flash声音控制详解
· Flash色彩偏转技巧的控制
· As2 Class 的 Private 属性
    微笑服务 优质保证 索取样品