用AS控制MC的傾斜屬性

來源:互聯網
上載者:User
控制

  在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)
}

  就看到效果了.

  從前面的簡單測試,到寫成這段代碼,可謂艱辛至極.但不管怎樣也好,代碼寫成了,也希望能讓大家從中學到一些東西.至於從簡單的測試代碼到上面的代碼是怎麼推出來的,裡頭的語句意義何在,我將在這段時間給大家作出解釋.



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。