我正在尝试使用flash cs6为我工作的公司开发数字标牌应用程序。它实际上由两个应用程序组成,一个是服务器端,另一个安装在具有运行windows xp的集成计算机的电视显示器上。服务器应用程序只不过是管理员用来通过某些php输入存储在mysql数据库中的数据的表单。这很好。
我的问题在于在显示器中运行的客户端。该应用程序实际上非常简单:它应该从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
任何建议都将不胜感激!
答案 0 :(得分:1)
退后一步,看着大局......
我已经使用Flash构建了一个数字标牌类型的应用程序,其中包含从服务器发送的内容,目前已开始其第四年的更新。我认为一些一般性的想法:
不要将传统的Flash时间轴用于程序的主流程。而是使用Actionscript 3以编程方式执行所有操作。这应该消除一些未正确显示的问题,但更重要的是将允许更大的扩展能力。这也可以让您在动态插入内容时获得更好的控制权。
有一个顶级&#34;经理&#34;用于管理&#34;播放列表&#34;你要循环的内容。内容播放完毕后,应通知&#34;经理&#34;已完成(或失败),以便管理员可以立即播放下一个内容项。这将需要在适用的情况下添加事件监听器和处理程序,在某些情况下可能会替换计时器。
将所有代码保存在类文件(ClassName.as)中,并将它们组织到文件夹(名称空间)中。没有任何内联Actionscript只是位于随机关键帧上。您可以使用&#34;导出到Actionscript&#34;将库项目链接到类。选项。
让您的主类尽可能小,尽可能多地将代码推送到单独的类文件中。
大多数动画和补间都可以使用TweenLite和TimelineMax系列中的包来完成。
任何与徽标相关的动画都应该包含在自己的MovieClip / Library对象/类中,这样您就可以轻松地将其插入任何地方。对于您的徽标动画,如果包含动画,则使用传统时间轴制作动画时不应该有任何问题。
在本地机器上下载所有服务器内容,然后让Flash在本地读取所有内容。这应该可以消除对内容的长时间等待,特别是如果互联网陷入困境。
为每种内容类型(视频,图像幻灯片,介绍动画等)设置一个类。这将允许您插入自定义内容。
尽可能使用XML或JSON。
我希望有所帮助。
答案 1 :(得分:-1)
您可以使用名为“Xibo”的在线开源软件,它非常有用,可以满足您的需求。 https://springsignage.com/xibo-for-android/