我們正在製作一些帶有一些相當複雜的動畫的Flash瀏覽器遊戲。我們的設計師正在Flash Professional中製作動畫,而我將所有東西接線並通過AS3添加一些邏輯(使用FlashDevelop)。我應該如何用AS3在較大的動畫中替換圖像?
在我們更復雜的動畫之一中,「獎勵項目」在屏幕上移動。它充滿了各種各樣的特效,因此它會消失幾幀,然後再次出現。
從AS3我們希望能夠動態地決定哪些加分項目(比如蘑菇或星形)到動畫包括。我們不希望要求我們的設計師爲我們的每個獎勵項目複製整個動畫。
這是我們已經試過:
創建兩幀(1種蘑菇,1個星幀)的FlashPro 「BonusItem」 影片剪輯和ActionScript導出。 在FlashPro中創建複雜的動畫影片剪輯,並將BonusItem動畫片段添加到相關的幀中。給所有必要的KeyFrame上的實例名稱BonusItem實例。導出ActionScript的整個動畫片段(導出爲「ComplexAnimation」)。
意向:
的目的是能夠做到這一點:
var complexAnimation:ComplexAnimation = new ComplexAnimation();
complexAnimation.bonusItem.gotoAndStop("star"); // Frame labels have been added in FlashPRo.
this.addChild(complexAnimation);
這玩複雜的動畫與明星,我們可以方便地調用gotoAndStop(「蘑菇」),以用蘑菇玩同樣的動畫。
問題:
的第一個問題是,complexAnimation.bonusItem是在上述行02空。我通過處理complexAnimation的ADDED_TO_STAGE並將第02行放在處理程序中解決了這個問題。
接下來的問題是,每一次bonusItem的movieclip開始補間,或者如果它不存在於一些幀,並隨後重新加入complexAnimation.bonusItem屬性/參考被重新分配給新bonusItem實例。然後我必須找到一種方法來知道這種情況何時發生,並在新實例上調用gotoAndStop(「明星」)。
我發現兩種方法可以做到這一點:
1)請收聽complexAnimation添加的事件與「bonusItem」的target.name。在強類型語言中有點廢話不得不求助於匹配的字符串,但這是有效的。順便說一下,當ADDED事件被觸發時,新的框架對象引用仍然爲空。
2)收聽FRAME_CREATED事件。這種情況發生在新幀引用初始化的地方,比ADDED晚。因此,我可以檢查complexAnimation.bonusItem是否非空,然後調用gotoAndStop(「star」)。與此有關的一個問題是調用gotoAndStop會觸發另一個FRAME_CREATED事件觸發,所以我需要防範無限循環。再次,它的工作原理,但我沒有很好的感覺。
結論:
嗯,我真的沒有其他的結論比我覺得我的工作真的很難做一些比較簡單的。我希望有更簡單的方法。我有強烈的感覺,我瘋了。任何人都知道更好的方法來做到這一點?
如果我理解正確,你有一個動畫路徑,你想跟隨一些隨機圖像,對吧? – Veehmot 2011-03-04 22:56:40
圖像實際上並不遵循動畫路徑(或運動向導)。它在整個動畫過程中會經歷許多直線調整。我希望能夠以編程方式在AS3中指定要使用的圖像。 – 2011-03-05 13:41:17
我在上述帖子中發生了錯誤。 Flash確實分配了一個BonusItem的新實例,但它是由掩碼圖層關鍵幀而非補間造成的。 – 2011-03-09 19:36:19