我有一個Flash應用程序,它可以創建一種幻燈片演示文稿。
所有'幻燈片'都存儲在讀取和處理的XML文件中。如何構建我的類以避免使用靜態函數
我試圖使用這個XML文件來構建演示文稿。
目前,我的主要類有它最初的功能main
和靜態函數processXML
main
開始我database
類名爲initdb的功能。我的問題之一是initDB放棄處理,因爲它依賴於事件監聽器。在加載XML文件完成後,事件偵聽器啓動我的main
上的靜態函數以從此文件創建對象。
問題是因爲事件監聽器繼續處理(在不確定的時間量之後),所以這些函數不再受main
類的控制。
通常情況下,在這種情況下,我會避免使用靜態的,因爲我從主功能通過使用處理returns
控制處理 - 即返回一個值拉控制權返回給調用者類的功能。
現在,所有這些都產生了敲門效應,我不能使用addChild調用,或者實際上任何類似的調用,因爲函數是靜態的。
如果你能騰出一些時間,我真的需要重新考慮我的文件的工作方式。
主類
public static var databaseXML:XML;
public var database:ContentDatabase = new ContentDatabase();
public function main()
{
database.initDB();
}
public static function processXML()
{
//Get First Slide
var introSlide:SlideLayout = new SlideLayout();
var allSlides:XMLList = main.databaseXML.children();
var introSlideXML:XML;
for each (var slide:XML in allSlides)
{
introSlideXML = slide;
break;
}
var theSlide:MovieClip = introSlide.createSlide(introSlideXML);
addChild(theSlide); //Fails, Obviously
}
ContentDatabase類
private var xmlLoader:URLLoader;
public function initDB()
{
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, onComplete, false, 0, true);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
xmlLoader.load(new URLRequest("resources/slides.xml"));
}
private function onComplete(e:Event):void
{
try
{
main.databaseXML = new XML(e.target.data);
xmlLoader.removeEventListener(Event.COMPLETE, onComplete);
xmlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
main.processXML();
}
catch (err:Error)
{
trace('broke: ' + err.message);
}
}
private function onIOError(e:IOErrorEvent):void
{
trace('broke: ' + e.text);
}
我願意我是如何構建這個項目讓我這種溝通的所有想法。
理想情況下,我希望ContentDatabase
類只保留XML處理。
嗨帕特里克,謝謝你的幫助! –
等一下!另一個人是否因他不同意他而刪除了他的答案? –
我真心希望這不是原因! – PatrickS