如何向视频播放器按钮组件添加类似按钮的行为?

时间:2011-02-23 20:18:27

标签: flash flex actionscript-3 movieclip flvplayback

背景

我正在尝试创建一个简单的“通用”媒体播放器,它为视频和音频播放提供相同的用户界面(或尽可能相似)。不幸的是,就我所知,FLVPlayback似乎无法处理音频文件,所以我使用的是Sound和SoundChannel。

我的视频播放使用FLVPlayback组件处理,该组件在需要时即时“连接”到标准控件。我想要做的是在播放声音时将它们连接到Sound / SoundChannel,以便在两种情况下都可以使用相同的UI小部件。我想避免从头开始构建我的所有组件,因为FLVPlayback组件“免费”做了很多不错的东西,但它开始看起来很棘手。

Gorey Stuff

标准的PlayPauseButton是一个有两层的MovieClip,一个包含Play按钮(实例名称为play_mc),另一个包含Pause按钮(pause_mc)。其中一个是一部电影,其代码如下:

stop();
this.upLinkageID = "PauseButtonNormal";
this.overLinkageID = "PauseButtonOver";
this.downLinkageID = "PauseButtonDown";
this.disabledLinkageID = "PauseButtonDisabled";

电影有两帧。

在第一帧是一个动画片段,实例名称为placeholder_mc。

在第二帧上是按钮状态的实例,但它们没有实例名称(这会使事情变得更容易)。但是,它们是具有上面列出的名称的库对象的实例。

我想要做的是编写一个函数,当传递其中一个按钮(例如,pause_mc)时,它会自动添加类似按钮的行为。我无法从Adobe的“文档”中弄清楚的是,如何使用影片剪辑代码中嵌入的信息将placeholder_mc的内容与我想要的东西交换。

TL;博士

本质上我只需要实现set_instance函数,以便下面的代码按预期更改按钮的可见状态:

var my_button:MovieClip = pause_mc;
my_button.addEventListener( MouseEvent.MOUSE_OVER, function( e:Event ){
  set_instance( my_button.placeholder_mc, my_button.overLinkageID );
} );

2 个答案:

答案 0 :(得分:1)

我今天尝试使用PlayPauseButton组件。似乎Adobe没有公开地为我们提供我们正在寻找的钩子:P。

我提出的解决方案是使用Button UI Component并将其重新设置为PlayPauseButton

您可以从PlayPauseButton组件中包含的两个影片剪辑(播放和暂停)中挖掘各个按钮状态,为其指定实例名称,然后使用这些状态设置按钮的相应外观属性setStyle()方法。确保您还将按钮的大小调整为23x23以避免拉伸。

答案 1 :(得分:0)

我通常只是制作一个按钮,然后使用以下方式将影片剪辑或某个显示对象指定为皮肤:

var myButton:Button = new Button();
myButton.setStyle('upSkin', new PlaySkin());
myButton.setStyle('selectedUpSkin', new PauseSkin());

然后,所有按钮状态将由Flash自动处理。对于PlayPause按钮,您可以将按钮的“切换”属性设置为“true”,然后每次单击它时,按钮将从所选皮肤切换到向上皮肤再返回。