여러 개의 동영상을 MovieClip 객체로 저장하고이를 하나의 MovieClip 비디오 객체로 병합하여 모든 내용을 순서대로 재생하므로 사용자가 단일 비디오라고 생각할 수 있습니다.).여러 개의 MovieClip을 하나의 MovieClip으로 병합
고마워요!
편집 : Flash Player 내부의 ActionScript에서 프로그래밍 방식으로 수행하고 싶습니다.
여러 개의 동영상을 MovieClip 객체로 저장하고이를 하나의 MovieClip 비디오 객체로 병합하여 모든 내용을 순서대로 재생하므로 사용자가 단일 비디오라고 생각할 수 있습니다.).여러 개의 MovieClip을 하나의 MovieClip으로 병합
고마워요!
편집 : Flash Player 내부의 ActionScript에서 프로그래밍 방식으로 수행하고 싶습니다.
타임 라인에 차례로 추가하십시오. 포함 된 영화의 재생 시간만큼 타임 라인에 각 영화 클립이 있는지 확인하십시오. 동영상 클립이 포함될 타임 라인에 키 프레임을 추가하여이 작업을 수행 할 수 있습니다. 또한 비디오 프레임 속도와 플래시 플레이어 프레임 속도가 동일한 지 확인하십시오.
이것은 프로그래밍 문제가 아닙니다.
TIMELINE_COMPLETE 이벤트가 있다면 좋을 것입니다. 그러나 거기에 없다! 따라서 가장 좋은 방법은 문서화되지 않은 addFrameScript 메소드입니다.
addFrameScript()를 사용하여 MovieClips (또는 다른 프레임)의 마지막 프레임에 코드를 추가 할 수 있습니다. 이 코드는 이전 MovieClip (방금 완료 한 MovieClip)을 제거하고 새 MovieClip (다음 MovieClip을 대기열에 추가)을 추가 할 수 있습니다.
public function Main()
{
// Remember addFrameScript() is zero based.
currentVidMc.addFrameScript(currentVidMc.totalFrames - 1, frameFunction);
}
private function frameFunction():void
{
//delete frame script by passing null as second parameter
currentVidMc.addFrameScript(currentVidMc.totalFrames - 1, null);
removeChild(currentVidMc);
addChild(newVidMc);
newVidMc.gotoAndPlay(1);
}
EDIT *
원활한 전환을하려면, 당신은 볼 세트 (약 15 프레임이 나에게 좋은 소리지만, 당신이 시도해야합니다) 초기에 새 클립의 로딩을 시도 할 수 거짓, 중지됨. 그런 다음 현재 클립의 마지막 프레임이 굴러 올 때 현재 클립을 제거하고 새 클립 visible 속성을 true로 설정하고 재생하십시오. 점프의 대부분은 클립을 스테이지에로드 할 때 발생하므로 클립을 미리 렌더링하면 도움이 될 수 있습니다.
감사합니다. 불행히도, 이것은 내 문제를 해결하지 못합니다. MovieClip의 ENTER_FRAME 이벤트를 사용하여 비슷한 작업을 수행했습니다. ENTER_FRAME 이벤트가 발생하면 currentFrame과 totalFrames를 비교하여 같으면 후속 MovieClip을 재생하기 시작합니다. 그러나 MovieClips의 스티칭 지점에서 눈에 띄는 지연이 있습니다. MovieClips를 단일 프레임으로 결합 할 수 있다면 지연을 없앨 수 있다고 생각했습니다. 가능한가? – bartekb
당신은 확실히 맞습니다. 이는 일반적인 문제입니다. 도움이 될만한 답변을 편집했습니다. –
감사합니다. 모든 것을 미리로드하려고 시도했지만, MovieClips를 전환 할 때 play() 또는 gotoAndPlay()를 호출해도 꽤 빠른 시스템에서도 지연이 눈에 띄게 나타납니다. 주위에 길은없는 것처럼 보입니다. – bartekb
답변이 아니라 실제로 시도해 볼 수있는 2 가지 사항입니다.
package {
import flash.display.MovieClip;
import flash.events.Event;
public class OneMovieToRuleThemAll extends MovieClip {
public subClips:Array; //vector for cs4
private var index:int = 0;
public function OneMovieToRuleThemAll(subClips:Array) {
this.subClips = subClips;
}
//pre subClips.length > 0
public function playAll() {
for(var i:int = 0; i < subClips.length; i++) {
subClips[i].visible = i == 0;
subClips[i].stop();
addChild(subClips[i]);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event) {
if(index >= subClips.length) {
//dispatchEvent finished
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
if(subClips[index].currentFrame < subClips[index].totalFrames) {
subClips[index].gotoAndStop(subClips[index].currentFrame + 1);
}else{
subClips[index].visible = false;
index++;
subClips[index].visible = true;
}
}
}
}
일반적으로 사용하는 낙담 것 ENTER_FRAME 및 gotoAndStop로 (currentFrame)는 느린,하지만 당신은 늘 어떤 '봉합'
대안도 만들 수를 알 수 있도록 어쩌면이 각 프레임에 대한 동등하게 느리기 때문에 BitmapData.draw (..)를 사용하여 각 동영상의 각 프레임에 대한 비트 맵이있는 새로운 무비 클립입니다. 그런 다음 동일한 enter_frame 루프를 사용하고 각 프레임에 대해 표시되는 속성을 토글합니다. 아마도 메모리 할당량을 사용하고 있으며 원격으로 실행 가능한 속도인지 알 수 없습니다.
* 일부 XML 구성에서 표시 할 파일의 순서를 알 수 있습니다. * 첫 번째 파일 측정 fps (또는 사용 가능한 RAM 또는 인터넷 연결 - vedia를 재생하는 PC에 파일을 전달하는 방법에 따라 다름) * 마지막으로 랩퍼는 두 번째 파일을 재생 가능한 비율로로드하는 예상 시간의 200 % -300 %라고 결정합니다. * 예지 알고리즘이 충분히 좋은 경우 - 첫 번째 중지 전에 두 번째 vid가 있습니다. 그래서 가장 쉬운 부분은 여기에 있습니다. 마지막 프레임과 첫 번째 프레임이 충분히 일치하는 경우입니다. 필요한 프레임에서 두 번째 비디오를 일시 정지하고 알파를 0으로 설정하면 첫 번째 프레임 아래에 배치됩니다. 첫 번째 프레임이 일치하면 알파를 줄이기 시작하여 두 번째 프레임을 증가시키고 대신 일시 중지에서 해제합니다.
오직 인간의 작업 (래퍼 코딩을 제외하고 최대 몇 개의 코드 화면처럼 느껴짐)은 일치하는 프레임을 검색하여 config에 모두 넣는 것이지만 BitmapData.compare()
을 사용하여 피할 수 있습니다 방법. 행운을 빕니다!
저는 Flash Player 내부의 ActionScript에서이 작업을 수행해야한다고 명확히 했으므로 프로그래밍 문제입니다. – bartekb