定时器闪烁以在正确的时间显示某些内容

时间:2015-06-01 06:32:10

标签: actionscript-3 flash video timer

我想制作一个定时器,在我的panelText(动态文本框)中显示特定时间的文本,实际上我有一个视频,我想要有字幕,我想使用定时器,我的视频是3分钟, 37秒长,我有脚本,我想在某个时间显示,例如1分0秒它将显示文字"你好,这是我的视频,了解太阳系"在我的panelText中,在2分钟我想要显示文字"我们的太阳系中有8个行星"就像那样。有关信息,我使用flvPlayback播放视频并加载外部视频。

我的代码中的一个例子:

var myTimer:Timer = new Timer(217000);
var time = 0;
myTimer.start()
myTimer.addEventListener(TimerEvent.TIMER,timerHandle);

function timerHandle(event:TimerEvent){
    if(myTimer == 120000)
    {
        panelText.text="There's 8 planets in our solar system";
    }                                                                              

我得到错误1176:静态类型flash.utils:Timer与可能不相关的类型int之间的比较。有人能帮帮我吗?我很抱歉我的英文不好

3 个答案:

答案 0 :(得分:0)

您应该使用FLVPlayback的{​​{3}}功能在播放FLVPlayback视频时进行精确操作。您可以使用此功能设置要显示自定义字幕的任何点,可以根据需要设置多个点,然后在MetadataEvent.CUE_POINT实例上侦听FLVPlayback事件,并处理提示指向以显示相关的字幕。但请注意,您必须单独解析字幕过期,或指定一个提示点以在显示的提示点后几秒移除显示的字幕。虽然如果您能够直接在视频上添加字幕会更好,但通过视频搜索不需要处理错位的字幕。尽管如此,如果您还要收听VideoEvent.FAST_FORWARDVideoEvent.REWIND事件以处理用户与回放的互动并通过调用findNearestCuePoint()来查找相应的字幕,它仍然适用于纯AS3代码最接近的早期字幕启用提示点。

添加提示点的示例:

flv.addASCuePoint(0.1,"1",{text:"Subtitle one"});
flv.addASCuePoint(6.8,"2",{text:"Subtitle two"});
flv.addASCuePoint(11.8,"2 hide",{text:""}); // remove old subtitle
flv.addASCuePoint(120.0,"3",{text:"There are 8 planets in our solar system"});

请注意,每次调用都会返回Object,只要调度MetadataEvent.CUE_POINT事件,也会返回该值。这有一个parameters子对象,您已将其作为第三个参数传递给addASCuePoint,然后根据其中的内容进行解析并采取措施。在这里,我已经放置了一个字段" text"进入每个参数对象,应该是要显示为字幕的文本。所以,然后你听取提示点事件并采取行动,如下:

flv.addEventListener(MetadataEvent.CUE_POINT,cueHandler); 
// do this only once, a listener does not need to be added per cue point
function cueHandler(e:MetadataEvent):void {
    var cuepoint:Object=e.info;
    if (cuepoint.parameters) {
        panelText.text=cuepoint.parameters.text;
    } else {
        // DEBUG here
    }
}

如果是搜索,您可以使用将调用findNearestCuePoint()的函数来侦听FF和回放事件,检索其parameters.text并将该文本放入文本字​​段。

答案 1 :(得分:0)

您误解了Timer类的用法。

var myTimer:Timer = new Timer(n)表示定时器总是"勾选"在指定的时间间隔n,在您的情况下每217000毫秒(217秒)。

这可能不是最好的解决方案,但它会向您展示如何为您的场景使用计时器类。

var myTimer:Timer = new Timer(1000); //a timer that will tick every second
myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
myTimer.start(); //you should set up your listener before you start the timer

function timerHandler(event:TimerEvent):void{
    //myTimer.currentCount will tell you how many times your Timer has ticked
    //every tick, in this scenario, represents exactly one second, because we initialized the Timer with 1000 milliseconds
    //so, if you want to show some text 86 seconds after the video has started, you could do:

    if(myTimer.currentCount == 86){
         panelText.text = "We're 86 seconds into the video";
    }else if(myTimer.currentCount == 217){
         //after reading your code it seems like you intended to let the timer only run 217 seconds, because that's the length of your video
         //my proposed solution could also handle this, in this else if clause

         myTimer.stop();
         myTimer.removeEventListener(TimerEvent.TIMER, timerHandler);
         myTimer = null;
    }
}

答案 2 :(得分:0)

错误是对的。您正在将计时器与数字进行比较!! 修复了部分代码:

if(myTimer.currentCount==120000){
  panelText.text="There's 8 planets in our solar system";
}

并且您的计时器构造函数错误!第一个参数是延迟,下一个是重复计数。 固定代码:

var myTimer:Timer = new Timer(100,2170);
var time = 0;
myTimer.start()
myTimer.addEventListener(TimerEvent.TIMER,timerHandle);

function timerHandle(event:TimerEvent){
  if(myTimer.currentCount == 1200)
  {
    panelText.text="There's 8 planets in our solar system";
}        

在此代码中,我们的计时器每0.1秒(100毫秒)打勾并勾选2170次。所以,要设置你的文字,你必须在你想要的第二个之后加零。

希望这会有所帮助:)