我正在嘗試爲我工作的公司開發數字標牌應用程序,使用flash cs6。它實際上由兩個應用程序組成,一個是服務器端,另一個安裝在具有運行Windows XP的集成計算機的電視顯示器上。服務器應用程序不過是一種管理員通過某些php輸入存儲在mysql數據庫中的數據的表單。這工作正常。數字標牌應用程序(as3)
我的問題是在顯示器中運行的客戶端。該應用程序實際上非常簡單:應該從mysql表中加載不同類型信息的「部分」,因此加載全部存儲在服務器中的文本,圖像和視頻。事情是與定時器並行運行的裝載機。定時器負責調用影片剪輯和框架,這樣我就不需要在時間軸中設置動畫的所有內容,並且應用程序一直在循環中從一個節到另一個節運行。還有我發現問題的地方。我無法找到一種合適的方式來編程這樣的裝載機,並且與定時器一致。所以最終的結果是圖像和視頻部分或從未加載,使得客戶端應用以奇怪的方式運行。這裏的應用程序的部分之一的例子:
import flash.utils.Timer;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import fl.transitions.*;
import fl.transitions.easing.*;
var randomNumber:Number = Math.random();
var xAnivItemRef:Number = 75;
var yAnivItemRef:Number = 140;
var anivArray:Array = new Array ;
var endingTimer:Timer = new Timer(10000);
var loopTimer:Timer = new Timer(500);
var counter:uint = 0;
var fotosURL:String = "http://www.maxionline.com.br/maxi_sds/server/img/aniversariantes/";
var current_time = new Date();
var i:uint = 0;
var alphaTween:Tween;
var aniversariante_mc:MovieClip;
var numAniversariantes:uint;
endingTimer.addEventListener(TimerEvent.TIMER, leaveEvents);
loopTimer.addEventListener(TimerEvent.TIMER, loadAniv);
function setTitleMonth(event:Event = null)
{
var month:String = current_time.getMonth();
switch (month)
{
case "0" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "janeiro!";
break;
case "1" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "fevereiro!";
break;
case "2" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "março!";
break;
case "3" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "abril!";
break;
case "4" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "maio!";
break;
case "5" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "junho!";
break;
case "6" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "julho!";
break;
case "7" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "agosto!";
break;
case "8" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "setembro!";
break;
case "9" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "outubro!";
break;
case "10" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "novembro!";
break;
case "11" :
anivTitle_mc.anivTitlePt2_mc.month_txt.text = "dezembro!";
break;
default :
break;
}
}
function anivSetup(event:Event = null):void
{
var anivLoader:URLLoader = new URLLoader();
anivLoader.dataFormat = URLLoaderDataFormat.TEXT;
anivLoader.load(new URLRequest("http://www.maxionline.com.br/maxi_sds/client/dataRecoverAniv.php?_rand =" + randomNumber));
anivLoader.addEventListener(Event.COMPLETE, getAnivData);
}
function getAnivData(evt:Event = null):void
{
var anivDataStr:String = evt.target.data;
var anivDataArray:Array = anivDataStr.split("&");
var numItemsStr:String = anivDataArray[anivDataArray.length - 1].substr(5);
var numItems:Number = Number(numItemsStr) * 4;
numAniversariantes = numItems/4;
anivDataArray.splice(anivDataArray.length - 1, 1);
for (var i:uint=0; i<numItems; i++)
{
anivArray.push(anivDataArray[i]);
}
loadAniv();
anivMask_mc.gotoAndPlay("on");
endingTimer.start();
loopTimer.start();
}
function loadAniv(event:Event = null):void
{
var aniversariante:anivItem_mc = new anivItem_mc();
aniversariante.name = "aniversariante" + counter;
if (numAniversariantes > 12)
{
if (counter < 4)
{
aniversariante.y = yAnivItemRef + (220 * counter);
aniversariante.x = xAnivItemRef;
}
if (counter >= 4 && counter < 8)
{
aniversariante.y = yAnivItemRef + (220 * (counter - 4));
aniversariante.x = xAnivItemRef + 1355;
}
if (counter >= 8 && counter < 12)
{
aniversariante.y = yAnivItemRef + (220 * (counter - 8));
aniversariante.x = xAnivItemRef + 250;
}
if (counter >= 12 && counter < 16)
{
aniversariante.y = yAnivItemRef + (220 * (counter - 12));
aniversariante.x = xAnivItemRef + 895;
}
}
if (numAniversariantes > 8 && numAniversariantes <= 12)
{
if (counter < 4)
{
aniversariante.y = yAnivItemRef + (220 * counter);
aniversariante.x = xAnivItemRef;
}
if (counter >= 4 && counter < 8)
{
aniversariante.y = yAnivItemRef + (220 * (counter - 4));
aniversariante.x = xAnivItemRef + 1355;
}
if (counter >= 8 && counter < 12)
{
aniversariante.y = yAnivItemRef + (220 * (counter - 8));
aniversariante.x = xAnivItemRef + 250;
}
}
if (numAniversariantes > 0 && numAniversariantes <= 8)
{
if (counter < 4)
{
aniversariante.y = yAnivItemRef + (220 * counter);
aniversariante.x = xAnivItemRef + 200;
}
if (counter >= 4 && counter < 8)
{
aniversariante.y = yAnivItemRef + (220 * (counter - 4));
aniversariante.x = xAnivItemRef + 1150;
}
}
anivLoader_mc.addChild(aniversariante);
aniversariante_mc = MovieClip(root).aniv_mc.anivLoader_mc.getChildByName("aniversariante" + counter);
aniversariante_mc.anivName_txt.text = anivArray[i];
aniversariante_mc.day_mc.anivDay_txt.text = anivArray[i + 1];
var imgLoader:Loader = new Loader();
imgLoader.load(new URLRequest(fotosURL + anivArray[i + 3]));
imgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGR ESS,imageLoading);
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,imag eLoaded);
var fadein:TransitionManager = new TransitionManager(aniversariante_mc);
fadein.startTransition({type:Fade, direction:Transition.IN, duration:1, easing:Strong.easeOut});
counter++;
i = i + 4;
if (i >= anivArray.length)
{
loopTimer.stop();
loopTimer.removeEventListener(TimerEvent.TIMER, loadAniv);
}
}
function leaveEvents(event:TimerEvent):void
{
endingTimer.removeEventListener(TimerEvent.TIMER, leaveEvents);
endingTimer.stop();
anivMask_mc.gotoAndPlay("off");
play();
}
function imageLoading(evt:ProgressEvent):void
{
var loaded:Number = evt.bytesLoaded/evt.bytesTotal;
updateProgress(loaded);
}
function updateProgress(vl:Number)
{
aniversariante_mc.photo_mc.preloader_mc.loadingBar_mc.width = vl * aniversariante_mc.photo_mc.preloader_mc.loadingBar_mc.width;
}
function imageLoaded(event:Event):void
{
var loadInfo:LoaderInfo = (event.target as LoaderInfo);
aniversariante_mc.photo_mc.photoLoader_mc.addChild(loadInfo.cont ent);
}
anivSetup();
setTitleMonth();
stop();
的.fla文件可以在這裏下載:
http://www.maxionline.com.br/maxi_sds/sds_client.fla
任何建議將不勝感激!
謝謝,我去了loadermax,它對整體性能有很大的幫助,我幾乎沒有任何問題,因爲定時器和下載時間都沒有問題。但我仍然在使用一種方法,我不斷地從服務器上下載內容。我明白一個更好的解決方案是下載內容並加載本地文件,同時跟蹤服務器的變化。你有什麼建議可以實現這個目標嗎? –
您想在可以從服務器下載文件並將其寫入磁盤的環境中開發幫助程序。所有的客戶都是基於Windows的嗎?你的服務器運行的是什麼? – ToddBFisher
客戶端在Windows上運行。該服務器是基於Linux的。 –