AS控制MC的傾斜屬性

2021-08-25 03:15:14 字數 1669 閱讀 2563

在flash裡,mc的傾斜屬性可以通過手動的辦法來設定.在flash裡,傾斜是實現3d效果的重要方面.

但是as裡頭就沒有傾斜屬性的**,儘管現在模擬3d的**已經有很多人做出來,但是目前一般都是侷限在座標點的模擬方面.對於物體,點陣圖的簡單3d效果,哪怕就乙個傾斜,as都還沒能做到.

為了解決這個問題(這問題,經典裡一位使用者也曾問過),本人花了近一周的時間來研究:

廢話少說,還是轉入正題吧.

1乙個簡單的試驗:

在flash裡,畫乙個矩形(不要轉成元件),然後把該矩形稍作旋轉.

接著把轉了的矩形在水平方向做一下縮放,你就看到矩行實際上是傾斜了.

因此,利用as裡的_xscale和_rotation屬性就可以讓mc動態地傾斜了.

2把該試驗應用到as中

不妨寫個**試試看:

製作乙個mc(越複雜可能效果會越明顯)

往mc裡寫**:

onclipevent(enterframe)

測試一下,沒有傾斜效果,仔細看一下會發現在mc旋轉以後,縮放的座標也跟著旋轉.

可惜啊!

難道就沒有辦法了嗎?答案是否定的!

既然mc旋轉以後,縮放座標跟著旋轉,那麼,我們就把旋轉了的mc再轉為mc,那麼不就有兩個座標系了嗎?不就可以達到小測試的效果嗎?

筆者也許比較笨,這個小問題也給卡住了3分鐘.

言歸正傳,我們繼續說吧.

把剛才的mc的**清空,命名為mymc,然後把他轉換為影片剪輯.

往轉換了的影片剪輯輸入**:

onclipevent(load)

再測試一下,傾斜效果出來了!

筆者以為這樣就可以大功告成,想自己動態設定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))

就看到效果了.

從前面的簡單測試,到寫成這段**,可謂艱辛至極.但不管怎樣也好,**寫成了,也希望能讓大家從中學到一些東西.

至於從簡單的測試**到上面的**是怎麼推出來的,裡頭的語句意義何在,我將在這段時間給大家作出解釋.

類的屬性控制

設定物件屬性 setattr self,name,value def setattr self,name,value self.dict name value12 查詢物件屬性 getattr self,name 訪問這個屬性時 在沒有查詢到相應例項屬性時被呼叫 getattribute self,...

2 2 使用ARDUINO控制MC20發簡訊

使用 原始碼位置 可以通過arduino給某個手機號傳送簡訊,這個 寫的比較完善,不是簡單的只是傳送指令,而且對mc20的反饋資料進行解析分析判斷是否正常。正常則執行下乙個執行,不正常就會重 送該指令。可以從除錯資訊很清楚判定現在的工作狀態。修改 內的需要被撥打的 號碼,然後編譯正常通過。char ...

Redis和MC的對比

需求複雜方面 redis資料型別更豐富,mc只支援string型別 純kv 資料持久化方面 redis支援持久化,而mc是純記憶體 高可用方面 redis原生支援集群模式,而mc還需要客戶端去實現集群 i o模型方面 redis核心使用io多路單執行緒模型,mc是多執行緒io復用模型 mc 對於純簡...