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

Timer flash to show something at the right time

我想制作一个计时器,在特定时间在我的 panelText(动态文本框)显示文本,实际上我有一个视频我想要有字幕,我想使用计时器,我的视频是 3分 37 秒长,我想在某个时间显示脚本,例如在 1 分 0 秒时它将在我的面板文本中显示文本 "hello, this is my video to learn about solar system",在 2 分钟时我想显示文本 "There are 8 planets in our solar system",类似的东西。有关信息,我正在使用 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 类型之间的比较。有人可以帮我吗?,我很抱歉我的英语不好

您应该使用FLVPlaybackaddASCuePoint()功能在您的FLVPlayback fideo播放时进行精确操作。您可以使用此功能来设置要显示自定义字幕的任何点,可以有任意多的点,然后在 FLVPlayback 实例上监听 MetadataEvent.CUE_POINT 事件,并处理提示点以显示关联的字幕。但请注意,您必须单独解析字幕过期时间,或指定一个提示点以在显示提示点后几秒删除显示的字幕。虽然如果您能够直接在视频上添加字幕会更好,这样在您的视频中搜索就不需要处理未对齐的字幕。尽管如此,它仍然可以使用纯 AS3 代码,如果您还监听 VideoEvent.FAST_FORWARDVideoEvent.REWIND 事件来处理用户与播放的交互并通过调用 findNearestCuePoint() 找到最接近的早期字幕来显示相应的字幕-启用提示点。

添加提示点示例:

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"});

请注意,每次调用 returns 一个 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 并将该文本放入您的文本字段。

您误解了 Timer class 的用法。

var myTimer:Timer = new Timer(n) 表示定时器将始终 "tick" 在指定的时间间隔 n,在您的情况下每 217000 毫秒(217 秒)。

这可能不是最好的解决方案,但它会向您展示如何在像您这样的情况下使用计时器 class。

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;
    }
}

错误是 right.you 正在将计时器与数字进行比较!!。 固定部分代码:

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 次。因此,要设置您的文本,您必须在您想要的秒后输入一个零。

希望这对您有所帮助 :)