亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

用AS控制MC的傾斜屬性的代碼

 更新時間:2007年03月22日 00:00:00   作者:  
在FLASH里,MC的傾斜屬性可以通過手動的辦法來設(shè)定.在FLASH里,傾斜是實現(xiàn)3D效果的重要方面.
但是AS里頭就沒有傾斜屬性的代碼,盡管現(xiàn)在模擬3D的代碼已經(jīng)有很多人做出來,但是目前一般都是局限在坐標(biāo)點的模擬方面.對于物體,位圖的簡單3D效果,哪怕就一個傾斜,AS都還沒能做到.
為了解決這個問題(這問題,經(jīng)典里一位用戶也曾問過),本人花了近一周的時間來研究:
廢話少說,還是轉(zhuǎn)入正題吧.
1一個簡單的試驗:
在FLASH里,畫一個矩形(不要轉(zhuǎn)成元件),然后把該矩形稍作旋轉(zhuǎn).
接著把轉(zhuǎn)了的矩形在水平方向做一下縮放,你就看到矩行實際上是傾斜了.
因此,利用AS里的_XSCALE和_ROTATION屬性就可以讓MC動態(tài)地傾斜了.

2把該試驗應(yīng)用到AS中
不妨寫個代碼試試看:
制作一個MC(越復(fù)雜可能效果會越明顯)
往MC里寫代碼:
onClipEvent(enterFrame){
  _rotation=30;
  _xscale=30;
}
測試一下,沒有傾斜效果,仔細(xì)看一下會發(fā)現(xiàn)在MC旋轉(zhuǎn)以后,縮放的坐標(biāo)也跟著旋轉(zhuǎn).
可惜啊!
難道就沒有辦法了嗎?答案是否定的!
既然MC旋轉(zhuǎn)以后,縮放坐標(biāo)跟著旋轉(zhuǎn),那么,我們就把旋轉(zhuǎn)了的MC再轉(zhuǎn)為MC,那么不就有兩個坐標(biāo)系了嗎?不就可以達(dá)到小測試的效果嗎?
筆者也許比較笨,這個小問題也給卡住了3分鐘.
言歸正傳,我們繼續(xù)說吧.
把剛才的MC的代碼清空,命名為myMC,然后把他轉(zhuǎn)換為影片剪輯.
往轉(zhuǎn)換了的影片剪輯輸入代碼:
onClipEvent(load){
   myMC._rotation=30
  _xscale=30
}
再測試一下,傾斜效果出來了!
筆者以為這樣就可以大功告成,想自己動態(tài)設(shè)置MC傾斜30度,卻發(fā)現(xiàn),上述的代碼雖然是傾斜了,但是傾斜并不是30度,上面兩個屬性跟傾斜屬性還存在著對筆者來說是比較復(fù)雜的數(shù)學(xué)關(guān)系.
筆者花了近一周的時間研究這種關(guān)系,盡管有點暈,但最終還是給弄出來了.
把上面的代碼替換為:
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)
}
就看到效果了.
從前面的簡單測試,到寫成這段代碼,可謂艱辛至極.但不管怎樣也好,代碼寫成了,也希望能讓大家從中學(xué)到一些東西.
至于從簡單的測試代碼到上面的代碼是怎么推出來的,里頭的語句意義何在,我將在這段時間給大家作出解釋.

相關(guān)文章

最新評論