经典论坛's Archiver

yugangyan 发表于 2007-1-18 23:05

滚动条控制avi电影播放问题。

AVI电影放在通道1,滑块放在通道2,滚动条放在通道3。

在第10贞加了:
on exitFrame me
  go the frame
  sprite(3).loch=sprite(2).loch+sprite(2).width*(sprite(1).movietime*1.0/(sprite(1).duration*1.0))
end

在滑块上加了:
on mouseDown me
repeat while the mouseDown
    sprite(me.spritenum).loc=the mouseloc
    updatestage
end repeat
set the constraint of sprite 1 to 2
end mouseDown

这样,滚动条能随着电影播放而动,滑块也可以拖动,但是我一放开鼠标,那滑块就到了开头。
我在10贞那加了:
sprite(1).movietime=((sprite(3).loch-sprite(2).loch)/sprite(2).width)*sprite(1).duration
后电影不能播放了。

请问我错在哪里?

想实现跟一般播放器一样,对电影的自由控制:滚动条滑块能随着电影的播放而滑动,鼠标可以拖动滚动滑块,当滑快被拖动后,电影能够跳到相应的画面并且开始播放。
要怎么做?

Iamvivian 发表于 2007-9-28 14:25

我也想知道怎么弄的,来个达人指教下啊!!!

大烧卖 发表于 2007-10-10 09:48

没有做实验,简单说一下我的看法

楼主你用来设置影片播放时间的这一句:
sprite(1).movietime=((sprite(3).loch-sprite(2).loch)/sprite(2).width)*sprite(1).duration

不应该放在第10帧的帧脚本里吧,因为设置影片当前进度的功能,应该是在滑块被拖动时触发,也就是你原先所写的:
repeat while the mouseDown
    sprite(me.spritenum).loc=the mouseloc
    updatestage
end repeat

在这个循环里设置影片播放时间,应该才是想到达到的效果,你试试?

另外,这种使用 while true 方式实现的滑块拖动,几乎相当于死循环,在实际运行时,一个拖动滑块的操作很可能让 CPU 跑到 100% 占用率,不是很理想。

我习惯的做法是借助滑块的 onExitFrame 事件,先用一个变量记录当前滑块是被拖动的状态还是非拖动状态,onMouseDown 和 onMouseUp 以及 onMouseUpOutside 时更改这个状态,每次 onExitFrame 时根据该状态决定是让滑块移动到影片当前进度位置,还是让滑块跟随鼠标位置移动,同时影响影片的播放进度。

而且如果在 onMouseDown 和 onMouseUp 及 onMouseUpOutside 事件时,分别将影片暂停和恢复播放,最终运行效果可以更加流畅,也减少了在慢速媒体如 CD-ROM 上运行出错的可能性,请参考!

页: [1]



Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.