2013-12-08 40 views
0

我剛開始學動作了一個月左右,我一直停留在這部分代碼,現在大約2天> <與hitTestObject-ING孩子

所以基本上有問題,我想在一個影片剪輯(「fire_mc」)寫hitTestObject來檢測,如果它重疊我在舞臺上添加的子(敵人)

因此,這裏是我的主舞臺寫道...

var newtarget:enemy=new enemy(); 
stage.addChild(newtarget); 
    newtarget.x=40; 
    newtarget.y=30; 

每次我在fire_mc中追蹤新目標時,結果都是NU LL ... 那麼我應該跟蹤敵人還是新目標? (因爲我嘗試過,沒有任何作品)。 如何在fire_mc動畫片段中打擊TestObject?

如果我要創建多個newtarget-s,我有可能hitTestObject newtarget嗎? 如果不是,我該怎麼辦?

有人可以告訴我根和MovieClip(根)之間的區別(因爲有時在動畫片夾中我必須使用前者工作,有時後者,而我不知道爲什麼因爲我所有引用到同一個地方)

對不起,這些簡單的和冗長的問題,我真的只是一個菜鳥,我試圖尋找了在網上尋找答案小時,但沒有任何幫助的止跌回升> <

在此先感謝:)

回答

0

在此聲明

var newtarget:enemy=new enemy(); 

var - 關鍵字用來定義可變因素,newtarget - 變量名,其中指針指向新類實例存儲,:enemy - 數據類型(類名稱),new - 用於創建新類實例關鍵字,最後enemy是類構造函數(順便說一下,有一個良好的禮儀規則,類名字是大寫的)

因此,回答你的問題,你應該使用什麼,當你想檢查是有些重疊是'newtarget'。

現在關於命中測試 - 只需檢查兩個對象是否碰到對方,就可以正確地使用您的代碼寫入的項目部分的引用。 例如,如果你在IDE創建的MainTimeline,和你創建enemy實例存儲在newtarget sameplace的代碼有你fire_mc,然後如果你檢查將被放置在MainTimeline的框架,其中既反對目前,它會是這樣

fire_mc.hitTestObject(newtarget); 

or this newtarget.hitTestObject(fire_mc); 所有這些語句都會給出相同的結果 - 如果對象相互交叉,則返回true

如果你創建了「NEWTARGET」上MainTimeline並檢查將從fire_mc(這是MainTimeline到)框架,那麼代碼將類似的東西

this.hitTestObject(MovieClip(root).newtarget); 

現在關於root。它主要是DisplayObject的一個屬性,其中存儲了對swf文件結構中最頂端的顯示對象的引用。因此,它由所有子類繼承。所以這就是訣竅。當你嘗試在swf結構中使用root來獲取你的對象時,這裏的區別是基於這樣的事實:root總是返回對象爲DisplayObject,這意味着如果你的對象包含的東西,DisplayObject你不應該得到它。所以你必須將返回的引用轉換爲需要的數據類型爲usign MovieClip(...)

+0

感謝@Aspiro的詳細解釋,但上面的方法似乎不起作用。 如果你有時間,你可以看看我的文件嗎? https://drive.google.com/file/d/0B2idKBpjHWuXNEpQSGZvTFh6bEU/edit?usp=sharing 上面的fire_mc在我的文件中被命名爲「fF」,並且是由「actor_mc」添加的子... addChild爲敵人在第三幀,並在第二幀「火」上寫入命中測試 – Michaelandhsm2

+0

找到一種方法可以在不使用特定部分代碼的情況下執行相同的效果....但是,多謝您通知我關於顯示對象,DisplayObjectContainer和所有其他細節:) – Michaelandhsm2