关于FLASH AS3.0代码问题

这是我做的绘本播放的效果,第一个按钮,可以控制整个动画随播随停的效果,左右两个箭头表示可以前后场景的跳转,右边的箭头跳到下一个场景,左边的箭头跳到上一个场景。第二个按钮,... 这是我做的绘本播放的效果,第一个按钮,可以控制整个动画随播随停的效果,左右两个箭头表示可以前后场景的跳转,右边的箭头跳到下一个场景,左边的箭头跳到上一个场景。第二个按钮,是重复播放当前场景,第三个按钮是有声音的,第四个按钮是声音消失的按钮,注意这点,当声音消失的时候,其实声音还是播放的,只是音量最小,等到下一个场景的时候如过你点击有声音的那个按钮的话,声音还是得和动画同步形式的播放,不会因为消声按钮的影响,导致动画和声音不匹配的现象出现,还有一点注意的是:动画一开始是直接播放的,不需要通过点击左右按钮来跳到下一个场景进行播放,只有有需要的时候才会点击那两个按钮进行跳转,
我的问题是:1,在动画播放的时候,通过消声的按钮,让声音消失,但是不影响气本来播放的速度,只是让声音到最小,当恢复声音的时候,动画播放的速度和声音的速度要是相匹配的,这个效果怎么实现呢,
2,就是当我们点击按钮左右后退和前进的按钮的时候,声音要怎么跳转到相符合的地方在进行播放
3,循环播放的那个按钮也是,当循环按钮进行时,声音也要从那个场景相匹配的地方进行播放。
4,上面的三个问题要能同时实现,我通过加载库中的声音,可以加载,但是要符合上面我提出的三个条件,我没做出来,不知道哪个大神的可以帮忙一下,能帮忙解决的话,事后再送上100个积分点。谢谢!!!!1!
展开
 我来答
briver686
2013-11-14 · TA获得超过479个赞
知道小有建树答主
回答量:310
采纳率:100%
帮助的人:222万
展开全部
这个在知道里不好说啊……

1、关于声音
你的声音到底是放在时间轴上的,还是放在库里链接类的?为什么主时间轴上会有声音呢?
第一种情况,你的声音是库的里链接了类的元件,然后通过申明该类的实例来调用的话,那么其实我也不知道怎么完全同步。我也面临同样的问题,因为每个机器都不一样,代码里声音和影片剪辑是同时开始播放的,但总会有误差,而且和运行环境有关,每台电脑的误差都不一样,所以也无法通过代码调整。
方法:
要实现需要三个类,分别是Sound,SoundChannel和SoundTransform。Sound类调用声音,SoundChannel类控制声音播放的起始点,SoundTransform控制音量。举个例子:
var playSound:MySound = new MySound; //其中MySound类是你库中的声音导出的类
var playChannel:SoundChannel = new SoundChannle();
var playTrans:SoundTransform;

playChannel = playSound.play(); //开始播放,其中Sound的play()方法的参数就是播放时间,单位是毫秒,就是指从改点开始播放

playTrans = new SoundTransform(1);

playChannel.soundTransform = playTrans; //这两句,首先用构造函数初始化SoundTransform对象,参数就是音量大小,1是最大,0是静音,然后通过SoundChannel的soundTransform属性来改变音量。
playChannle.stop(); //停止播放声音的方法

利用以上方法就可是实现声音的播放、停止以及音量的改变了。

如果你要强制声音和动画同步的话,建议你还是自己把声音分割开,然后放到每个动画的影片剪辑的时间轴上,在属性面板里把声音的同步方式设置成“数据流”,这样声音播放到哪一帧,动画就强制播放到哪一帧。如果是这样的话,那么影片剪辑是自带soundTransform属性的,可以用
mc.soundTransform = new SoundTransfrom();
来改变音量。

2、整体思路
首先你的每个“场景”只是单独的影片剪辑吧,在flash里这个不叫场景,场景是有单独的含义的。我还是建议你用一些格式工厂或者Audition之类的软件分割声音,把声音放在每个“场景”的时间轴上,这样会轻松的多,而且能保证同步。

思路比较简单,切换“场景”的方法其实就是移除上一张影片剪辑,添加下一张,把你的影片剪辑放在一个数组里,然后通过一个参数作为索引指示当前正在播放的影片剪辑,然后在暂停、重播、静音等按钮的侦听函数里用这个索引指向当前影片剪辑,从而实现对正在播放的影片剪辑进行控制。

这个虽然简单,但是不好说明,因为对你的文档结构一无所知,如果愿意留个联系方式或者把文档发给我,我帮你做。
更多追问追答
追问
谢谢你的回答,貌似第一位回答者弄清楚我在说什么了,我上面的情况要满足很多条件,才能运行,单独的声音加载我还是会的,只是要同步话,我遇到的这个问题,声音我自己已经切割好了,现在我在纠结的只有一件事情,当声音放在时间轴上的时候,怎样通过有声和无声两个按钮来控制声音的出现,与此同时还要与动画同步,不能出现动画播到后面的时候,你点击有声按钮的时候,出来的声音与动画不是同步的,那就是问题了,
追答
声音分割好了,放在时间轴上,同步方式设置成“数据流”,就同步了,如果你暂停了影片剪辑的播放,声音也就跟着停止播放了,不需要单独的代码了。不过既然你已经把每个场景分割制作成了单独的影片剪辑,为什么主时间轴上还会有这么多帧,还有声音?

举例子吧,比如你的场景放到了舞台上,给他起个实例名,比如:scene
然后的你四个按钮需要有实例名,比如pause_btn,replay_btn,mute_btn,muteoff_btn,然后写代码

pause_btn.addEventListener(MouseEvent.CLICK,pauseScene);
replay_btn.addEventListener(MouseEvent.CLICK,replayScene);
mute_btn.addEventListener(MouseEvent.CLICK,mute);
muteoff_btn.addEventListener(MouseEvent.CLICK,muteoff);

function pauseScene(evt:MouseEvent):void{
scene.stop();

}

function pauseScene(evt:MouseEvent):void{
scene.gotoAndPlay(1);

}

function pauseScene(evt:MouseEvent):void{
scene.soundTransform = new SoundTransform(0);

}

function pauseScene(evt:MouseEvent):void{
scene.soundTransform = new SoundTransform(1);
}

然后至于上一场景下一场景的按钮,你只需要利用gotoAndStop()跳转到有该场景的帧,并且不同帧上不同的场景都实例名都叫scene就行了。
alanbabbage
2013-11-14 · TA获得超过977个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:1148万
展开全部
1、声音的消声,使用全局音量设置即可

import flash.media.SoundMixer;
import flash.media.SoundTransform;
SoundMixer.soundTransform = new SoundTransform(0);//0为静音,1为正常音量

2、使用声音的数据流形式,将声音与帧绑定,这样声音与进度是一致的
点中需要添加声音的关键帧,在属性框中,声音->名称->选择库声音,之后在“同步”选择数据流。

3、使用数据流,声音会跟帧走,循环播放也当然会同步了。

4、如果要使用代码加载的形式,则需要使用声音的跳转的方法来播放
这时就需要你记录好声音的位置,比如15000毫秒处是下一个场景的声音位置,则在按钮跳的时候设置声音跳播

var s:Sound = new url_sound();//库中的声音
var channel:SoundChannle = s.play();//播放时记录好控制柄

跳播时
channel.stop();
channel = s.play(15000);//这个15000是预先设定好的位置

循环的时候,先将声音停了,重新从0播起
channel.stop();
channel = s.play();

声音停还有一个全局的,即所有声音都会停
SoundMixer.stopAll();

关于动画与声音同步问题,建议使用数据流方法制作。

PS:帧时间与声音时间是有出入差异的,所以想使用帧时间来控制声音二进制流的读取位置来播放的方法还有待研究。
追问
能问你的QQ号码吗?我想向您洗洗讨教一下,可以吗?
追答
已发送到私信,私人信息不方便直接回答,敬请谅解!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式