作者dreamboxer (陌生人)
看板Flash
標題Re: [問題] 看到一個非常好用的as..但是不知道怎麼 …
時間Tue Jul 8 01:24:56 2008
※ 引述《a149851571 (yem)》之銘言:
: http://www.tink.ws/blog/as-30-hittest
: 這是一個老外寫的hittest..它可以判斷不規則形狀的物件
: 我在fla檔裡面是這樣寫的
: import ws.tink.display.*;
: var hitst:HitTest = new HitTest();
: if(hitst.complexHitTestObject(this.circle_1,this.circle_2,1))
: trace("hit!!");
: 會一直出現錯誤:
: 1061: Call to a possibly undefined method complexHitTestObject through a
: reference with static type ws.tink.display:HitTest.
: 請問我還有哪裡需要改的嗎?
因為原Po問了 有static 和 沒static 的差別...
只好拿出不大好吃的物件導向程式語言解釋一下...orz
有加 static 修飾字的 function 表示這個 function 是一個 class function
而沒有加 static 修飾字的 function 表示這是一個 object function
class function 和 object function 有啥不一樣呢...
就是一個不用 new 就可以用(static, class function),
一個要 new 才可以用(object function)。(好像廢話...orz)
事實上,這兩個在執行的時候記憶體的使用也是不一樣的...
想像一下,我們有一隻AS3程式叫做血腥 "動物園.as"
所以我的 "動物園" 這個 class 裡面我寫了兩個 function
一個是
老虎(人) {} ← 一個需要傳入<人>的 object function, 沒有 static 修飾
另一個是
static 收票員(錢) {} ← 一個傳入<錢>的 class function
所以當我在別的程式用到 動物園 裡面的 function 的時候,
我們可以 tiger_1 = new 老虎(人); ,但我們只會有一個收票員,
因為他被宣告成static。
當你的swf被 Flash Player 載入(但還沒開始執行)的時候,
他們在記憶體區塊會被分配成這樣(概念上):
┌────────────┬──────┐
│ ※老虎(人) {....} │ 位址:001 │
├────────────┼──────┤
│ ◎收票員(錢) {....} │ 位址:002 │
└────────────┴──────┘
※號表示載入時屬於object function的程式,◎表示載入時屬於class function的程式
然後,Flash Player 開始執行你的程式:new 了 tiger_1 這隻老虎
┌────────────┬──────┐
│ ※老虎(人) {....} │ 位址:001 ├─┐
├────────────┼──────┤ │
│ ◎收票員(錢) {....} │ 位址:002 │ │複製(new)一隻老虎
├────────────┼──────┤ │
│ 老虎(人) {....} │ 位址:003 │←┘←┐
├────────────┼──────┤ │這隻老虎的別名(reference)
│ tiger_1 = 003 │ 位址:004 │───┘叫作 tiger_1 指到剛剛複製
└────────────┴──────┘ 出來的位置...
但是因為 收票員 被宣告為 class function (有加 static),
所以他在記憶體中沒辦法被複製(所以才用static這英文單字),
永遠只有一份,你可以直接使用他。
而 老虎 因為被宣告為 object function (沒有static),
所以他要被複製(new)後"才"能使用,你可以複製出很多隻老虎(同時也會花掉更多記憶體)
除了記憶體使用不一樣外,在程式中這兩種東西(有static和沒static)設計的目標用途
也有些不大一樣的。(要講這用途還要再花些時間...orz)
這樣不知道有沒有了解...好像有點講太多。XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.166.132
※ 編輯: dreamboxer 來自: 59.115.166.132 (07/08 01:28)
推 ComicMan:大推 07/08 02:04
推 zswolf:這一定要推一下~~大大推 07/08 03:12
推 a149851571:哇....實在是太感謝大大了....一目了然~~ 07/08 10:00
→ dreamboxer:改一下標題方便日後的人搜尋...XD 07/08 10:23
推 kuwood:推圖說=w= 07/08 12:40
推 kerpohpwos:最近在學Java,又看到這篇,感覺很有親切感 07/08 16:56
推 starjou:所以 static class 其實在定義的時候就是一個實體 07/08 21:32
→ starjou:且不用指定給變數是嗎? 07/08 21:32
推 starjou:不對,我搞錯了,現在講的是 function 不是 class 07/08 21:34
推 etrexetrex:正確說 static function 是 class 擁有的 function 07/08 23:02
推 etrexetrex:1 個 class 可以有很多個 object(實體) 07/08 23:05
→ etrexetrex:因為 static function 是 class function 所以1個就好 07/08 23:06
推 osanaosana:小補充一下,可直接使用 動物園.收票員(錢) 函式 04/30 04:20
→ osanaosana:不需要宣告動物園的實體 04/30 04:21