Flash as3:絕對坐標與相對坐標
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-06 01:25:22 作者:佚名
我要評論
一個程序員寫一個平面的游戲,一般情況下是看不到UI界面的,里面的每個控件和圖像的移動和位置都是通過代碼來實現(xiàn),很多團隊把這個數(shù)據(jù)的任務交給了美工,美工在發(fā)圖的時候就把位置都拍好,并且給程序員。通常這里也有兩種模式,一個是給絕對坐標的,這適用于屏幕大小不會改
一個程序員寫一個平面的游戲,一般情況下是看不到UI界面的,里面的每個控件和圖像的移動和位置都是通過代碼來實現(xiàn),很多團隊把這個數(shù)據(jù)的任務交給了美工,美工在發(fā)圖的時候就把位置都拍好,并且給程序員。通常這里也有兩種模式,一個是給絕對坐標的,這適用于屏幕大小不會改變的,長寬高和位置都是寫死不變的。但是這種模式的程序往往比較小型,相反更多的都是相對坐標,這對于Flash版本的客戶端來說其實是很容易的事情,那么這個坐標到底怎么設置,經(jīng)歷折磨了我很久。
首先就是直接設置
mc1.x=??; mc1.y=??;
這樣mc1就設置好了,as3動態(tài)new出來的mc是沒有width的,也沒有height,而他的長和高本身也是不定,假設你在里面加了一張 300x200的圖片,那么他的w和h就會變成300和200,如果你又加了一張400x100的圖片,他的w就會變成400而h不變,這在于相對坐標上對應是復雜了很多的,比如我要讓這個mc完全居中要怎么做?
如果舞臺是1000的寬度,要劇中比較容易 mc1.x = (1000-400)/2; 這樣就居中了,來看原理,首先我們要舞臺居中,很容易就想到一個數(shù)字 1000/2 結果是500 但是x對舞臺的中央是不行的 x是左上角,所以這個答案還要再減去 400/2 相當于mc1再左移自己的一般的位置,這樣就完全劇中了,答案就是 1000/2-400/2 那么算式就演化出來了。
所以要居中的答案似乎已經(jīng)出來了 (stage.stageWidth-mc.width)/2 這個坐標一定是最中間的,但是真的如此嗎?如果舞臺變了呢?如果mc的大小變了呢?他還居中嗎?這樣想想依然是的。
我曾經(jīng)也是非常理想的認為這是最好的方法,但是實踐告訴我,我錯了,當我需要在mc中繼續(xù)增加原件圖片,并且這個圖片也要居中,并且這個圖片要在mc內(nèi),并且這個圖片可能大于mc也可能小于mc。來看看情況是怎么樣的。
如果mc2在mc1里,并且mc1大于mc2,很好 mc2.x = (mc1.width-mc2.x)/2; 非常好,很顯然他們對得很齊,并且mc1不需要在舞臺上移動。但是另一種情況呢?通過這個算法也可以得到他們的坐標,但是這個時候mc1.width已經(jīng)不在是原來的了,因為mc2的width比它大,所以顯然是出錯,算出來的結果是0,那么大的圖片就會和小的圖片”左對齊”了,而更新了舞臺上mc1的位置后mc1的位置是居中了,可是里面的卻錯得一塌糊涂,你又要重新對齊原來的圖像,2個文件就要來回對其,麻煩不錯,很容易對了這個忘了那個,最終結果就是圖像莫名其妙錯位,痛苦。曾經(jīng)思考過很多,圖像越多就越麻煩。
這個時候很多程序員并不會跳出來,會一直想如何對其,然后一直修復這個問題,其實錯了,我們都錯了,解決問題有時候不可以死腦筋,如果換思路會如何?有想過?換過以后卻是如此的簡單,我們再來看看原理。
首先我們把檢測他的大小,然后運算居中,但是大小會變,算了外面不能顧及里面,算了里面不能顧及外面,那能不能不算呢!答案是肯定的。其實無論如何大小變有一個點是永遠對著舞臺中心的,那就是mc的中心,但是width的大小在變,如何才能讓中心不變呢,這時我想到了一個關鍵字(注冊點),在FlashIDE里也許這個名詞很熟悉,但是到了代碼里可能很難聯(lián)想到這個關鍵字,所以我們要做的是讓mc的中心點永遠是0點就可以了。也就是說00點是中間而不是左上角!這個時候我們再來對齊看看??
mc1.x = stage.stageWidth/2;
mc2.x = -(mc2.width/2);
現(xiàn)在再來看看,無論里里面是大是小,永遠直接左移,先把自己的中心確定,然后在把這個中心對到舞臺的中心,居中行為最終外美的完成了。當然左對齊右對齊都可以用這個思路,你既然設置是00點的位置,那就先讓你的圖像和00對齊,再讓00去對別的地方,這樣迭代就不容易出錯了。原來就是如此簡單的問題,因為開始的時候就錯了,于是越來越麻煩,很多時候問題都是類似的,一定要注意。此問題經(jīng)歷深刻,故發(fā)表一下!最后來句廢話,有興趣轉載請著名出處,謝謝!謝謝支持!謝謝大家。
首先就是直接設置
mc1.x=??; mc1.y=??;
這樣mc1就設置好了,as3動態(tài)new出來的mc是沒有width的,也沒有height,而他的長和高本身也是不定,假設你在里面加了一張 300x200的圖片,那么他的w和h就會變成300和200,如果你又加了一張400x100的圖片,他的w就會變成400而h不變,這在于相對坐標上對應是復雜了很多的,比如我要讓這個mc完全居中要怎么做?
如果舞臺是1000的寬度,要劇中比較容易 mc1.x = (1000-400)/2; 這樣就居中了,來看原理,首先我們要舞臺居中,很容易就想到一個數(shù)字 1000/2 結果是500 但是x對舞臺的中央是不行的 x是左上角,所以這個答案還要再減去 400/2 相當于mc1再左移自己的一般的位置,這樣就完全劇中了,答案就是 1000/2-400/2 那么算式就演化出來了。
所以要居中的答案似乎已經(jīng)出來了 (stage.stageWidth-mc.width)/2 這個坐標一定是最中間的,但是真的如此嗎?如果舞臺變了呢?如果mc的大小變了呢?他還居中嗎?這樣想想依然是的。
我曾經(jīng)也是非常理想的認為這是最好的方法,但是實踐告訴我,我錯了,當我需要在mc中繼續(xù)增加原件圖片,并且這個圖片也要居中,并且這個圖片要在mc內(nèi),并且這個圖片可能大于mc也可能小于mc。來看看情況是怎么樣的。
如果mc2在mc1里,并且mc1大于mc2,很好 mc2.x = (mc1.width-mc2.x)/2; 非常好,很顯然他們對得很齊,并且mc1不需要在舞臺上移動。但是另一種情況呢?通過這個算法也可以得到他們的坐標,但是這個時候mc1.width已經(jīng)不在是原來的了,因為mc2的width比它大,所以顯然是出錯,算出來的結果是0,那么大的圖片就會和小的圖片”左對齊”了,而更新了舞臺上mc1的位置后mc1的位置是居中了,可是里面的卻錯得一塌糊涂,你又要重新對齊原來的圖像,2個文件就要來回對其,麻煩不錯,很容易對了這個忘了那個,最終結果就是圖像莫名其妙錯位,痛苦。曾經(jīng)思考過很多,圖像越多就越麻煩。
這個時候很多程序員并不會跳出來,會一直想如何對其,然后一直修復這個問題,其實錯了,我們都錯了,解決問題有時候不可以死腦筋,如果換思路會如何?有想過?換過以后卻是如此的簡單,我們再來看看原理。
首先我們把檢測他的大小,然后運算居中,但是大小會變,算了外面不能顧及里面,算了里面不能顧及外面,那能不能不算呢!答案是肯定的。其實無論如何大小變有一個點是永遠對著舞臺中心的,那就是mc的中心,但是width的大小在變,如何才能讓中心不變呢,這時我想到了一個關鍵字(注冊點),在FlashIDE里也許這個名詞很熟悉,但是到了代碼里可能很難聯(lián)想到這個關鍵字,所以我們要做的是讓mc的中心點永遠是0點就可以了。也就是說00點是中間而不是左上角!這個時候我們再來對齊看看??
mc1.x = stage.stageWidth/2;
mc2.x = -(mc2.width/2);
現(xiàn)在再來看看,無論里里面是大是小,永遠直接左移,先把自己的中心確定,然后在把這個中心對到舞臺的中心,居中行為最終外美的完成了。當然左對齊右對齊都可以用這個思路,你既然設置是00點的位置,那就先讓你的圖像和00對齊,再讓00去對別的地方,這樣迭代就不容易出錯了。原來就是如此簡單的問題,因為開始的時候就錯了,于是越來越麻煩,很多時候問題都是類似的,一定要注意。此問題經(jīng)歷深刻,故發(fā)表一下!最后來句廢話,有興趣轉載請著名出處,謝謝!謝謝支持!謝謝大家。
相關文章
flash cs6想要實現(xiàn)鼠標跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實現(xiàn)鼠標跟隨效果的教程,需要的朋友可以參考下2019-05-19
Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細的教程,需要的朋友2018-03-11
flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://www.fzitv.net/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2018-01-25
本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實現(xiàn)鼠標點擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學習2018-01-12
本教程教腳本之家的ActionScript教程學習者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細,感興趣的朋友歡迎前來分享學習2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學習者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細,方法也不難,非常適合Flash新手入門學習2017-11-18
Flash怎么設置元件坐標?flash使用代碼設置元件的坐標的教程
Flash怎么設置元件坐標?flash中導如的元件需要添加坐標,該怎么定位元件坐標呢?下面我們就來看看flash使用代碼設置元件的坐標的教程,需要的朋友可以參考下2017-10-11
Flash怎么制作來回搖擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細的教程,很簡單,需要的朋友可以參考下2017-05-23
Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2017-04-23











