我想制作一个定时器,在我的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之间的比较。有人能帮帮我吗?我很抱歉我的英文不好
答案 0 :(得分:0)
您应该使用FLVPlayback
的{{3}}功能在播放FLVPlayback视频时进行精确操作。您可以使用此功能设置要显示自定义字幕的任何点,可以根据需要设置多个点,然后在MetadataEvent.CUE_POINT
实例上侦听FLVPlayback
事件,并处理提示指向以显示相关的字幕。但请注意,您必须单独解析字幕过期,或指定一个提示点以在显示的提示点后几秒移除显示的字幕。虽然如果您能够直接在视频上添加字幕会更好,但通过视频搜索不需要处理错位的字幕。尽管如此,如果您还要收听VideoEvent.FAST_FORWARD
和VideoEvent.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次。所以,要设置你的文字,你必须在你想要的第二个之后加零。
希望这会有所帮助:)