編輯:我不知道這是正常的,但我更願意留在原來的問題,並添加更新。請隨時讓我知道,如果我應該消除原代碼片段等。AS3:通過鍵盤控制兒童影片剪輯並返回到主時間軸
我想創建閃存CS6幻燈片般呈現,使用主時間軸,每一幀的一個符號和這些符號在不同的動畫(一些相當複雜)。由於我將使用演示遙控器,我已經捕獲的擊鍵和編碼pg_up和pg_down分別去到下一個和前一幀:
stage.addEventListener(KeyboardEvent.KEY_DOWN, pagerFunction);
var symb:movieClip;
function pagerFunction(e:KeyboardEvent):void
{
var myKey = e.keyCode;
if (myKey == Keyboard.PAGE_DOWN){
if (symb != null){
//some code that allows to control the symbols timeline forward
} else {
nextFrame();
}
}
if (myKey == Keyboard.PAGE_UP){
if (symb != null){
//some code that allows to control the symbols timeline backward
} else {
prevFrame();
}
}
我遇到的問題如下。我已經添加了framelabels和stop();代碼在符號動畫中,我需要控制從一個動畫到下一個動畫的步驟。然而,在網絡上嘗試了衆多解決方案之後,我無法成功地讓這些符號對pg_up和pg_down做出反應,就好像它們是主時間軸的一部分一樣。
綜上所述,我需要解決的是這樣的:
- 進入主時間軸幀
- 識別符號實例(標記爲_mc)
- 內部符號時間表,從第一幀播放(標記「0」),直到下一個標記的幀(「1」等)
- 停止並等待下一個pg_down開始從下一個標記的幀打以下(即「1」 - 「2」),或pg_up開始從以前標記的幀(即'0'到'1')播放(爲此,我將使用一個變量來保持音軌
- 最後一幀上(標記「最終」)退出符號焦點和鍵盤控制返回到主時間軸,以允許pg_down和pg_up到移動到下一個/前一個幀。在symbol.currentFrame == 0上的pg_up上,執行相同的操作。
順便說一句,如果有更好的方法來實現這一點,我打開(並非常絕望)的更好的建議/解決方案。
謝謝你這麼多的人誰可以幫助!
編輯:好吧,我想我是不是在這個問題上太清楚,所以我會盡力給位添加到此:
addEventListener(KeyboardEvent.KEY_DOWN, mc_pagerFunction);
var lbl:String;
var counter:Number = 0;
function mc_pagerFunction(e:KeyboardEvent):void {
var myKey = e.keyCode;
if (myKey == Keyboard.PAGE_DOWN){
lbl = this.currentFrameLabel;
if (this.currentFrameLabel == 'final'){
stop();
stage.focus = this.parent; //which would be the main timeline
} else if (Number(lbl) == counter){
this.gotoAndStop(lbl);
counter++;
} else {
this.gotoAndPlay(lbl);
}
}
if (myKey == Keyboard.PAGE_UP){
lbl = this.currentFrameLabel;
if (this.currentFrameLabel == '0'){
stop();
stage.focus = this.parent; //which would be the main timeline
} else if (Number(lbl) == counter){
this.gotoAndStop(lbl);
counter--;
} else {
this.gotoAndPlay(lbl);
}
}
}
現在,該位是我想要的行爲當主時間軸進入下一幀時,可以使用主時間軸作爲排序的幻燈片和符號內發生的真實事件。
順便說一句,我想嘗試並保持所有代碼在主要行動層,而不是在符號。我試過了,把注意力轉移到了符號上,它也沒有用,並且讓代碼遍佈整個地方,對抗我的神經;)。
我希望這將引發對我被堵在什麼一些光。
再次,任何幫助表示讚賞。感謝所有提前
更新: 請有人幫我在這裏! 這就是我想要的。從邏輯上講,它使世界上所有的感覺,除了它不工作。
var symb:MovieClip;
symb = MovieClip(root); //assign symbol I want to be controlled by pg_up/pg_down
symb.focusRect = false;
stage.focus = symb; //focus on current symbol
symb.addEventListener(KeyboardEvent.KEY_DOWN, mc_pager); //add keyboard event listener
function mc_pager(e:KeyboardEvent):void{
var myKey = e.keyCode;
if (myKey == Keyboard.PAGE_DOWN){
do{
symb.play(); // it plays, then checks if the lbl is null or final, then quits
} while (symb.currentFrameLabel == null && symb.currentFrameLabel != 'final');
symb.stop();
symb.removeEventListener(KeyboardEvent.KEY_DOWN, mc_pager);
stage.focus=MovieClip(root); //return focus to main timeline (in the next keyframes, the focus is on the nested _mc
}
if (myKey == Keyboard.PAGE_UP){
do{
symb.prevFrame();
} while (symb.currentFrameLabel == null && symb.currentFrameLabel != '0');
symb.stop();
symb.removeEventListener(KeyboardEvent.KEY_DOWN, mc_pager);
stage.focus=MovieClip(root);
}
}
我在哪裏爲了讓自己變得正確?請,夥計們,你們是專家,我需要你們的建議。謝謝!
更新: 在symb上做一個跟蹤,它似乎一進入函數就會忘記初始分配(symb = MovieClip(root))並顯示null。爲什麼?
我會考慮調度自定義事件,而您會在主時間軸中設置偵聽器並在符號時間軸中分派事件。我也會考慮使用面向對象原則並儘可能避免時間表。 – hexobolic 2015-04-04 20:00:37
感謝hexobolic的快速回復。不幸的是,我對as3(或任何動作版本)並不太瞭解。你會如此善意地闡述一下嗎?謝謝一堆 – Stratum 2015-04-04 20:15:52
'stage.focus = _mc;' ... 'stage.focus = root;' http://www.williammalone.com/briefs/how-to-set-focus-flash-actionscript- 3-as3/ – 2015-04-04 21:52:34