[英]Flash CS5 + AS3 Timeline Navigation
CS5和AS3的新手,所以如果我犯了一個根本性的錯誤,請立即糾正我。
我正在嘗試構建一個相當冗長而復雜的表格。 因此,這將需要瀏覽其中的不同部分。 我是Flash和AS3的新手,所以我開始做一些原型制作,並有兩個按鈕可以在時間軸上前后導航。 現在的問題是,當我試圖將其從“代碼片段”(正確的術語?)區域帶入我的主ActionScript文件時。 出現按鈕,但按它們不會執行MouseEvent。
有兩個問題。 1. Am I doing this right?
2. Why doesn't MouseEvent work when the code is in the .as file?
Form.fla-框架1代碼段
var form:Form = new Form();
addChild(form);
形式
package
{
import flash.display.MovieClip;
import fl.controls.Button;
import flash.events.MouseEvent;
public class Form extends MovieClip
{
private var nextButton:Button;
private var prevButton:Button;
public function Form()
{
setupNavigation();
}
private function setupNavigation():void
{
nextButton = new Button();
nextButton.label = "Next";
// ... size and position code
nextButton.addEventListener(MouseEvent.CLICK, moveForward);
prevButton = new Button();
prevButton.label = "Previous";
// ... size and position code
prevButton.addEventListener(MouseEvent.CLICK, moveBackward);
addChild(nextButton);
addChild(prevButton);
}
// Setup Mouse events
private function moveForward(event:MouseEvent):void
{
nextFrame();
}
private function moveBackward(event:MouseEvent):void
{
prevFrame();
}
}
}
您必須使用setter函數將對主時間軸的引用傳遞給Form類
var form:Form = new Form();
form.mainTimeline = this;
addChild(form);
在您的Form類(不是摘錄,類是正確的術語)中,添加以下函數和變量:
private var _mainTimeline:Object;
public function set mainTimeline(mtl:Object):void
{
_mainTimeline = mtl;
}
然后在前進/后退功能中將prevFrame()和nextFrame()更改為:
_mainTimeline.prevFrame();
_mainTimeline.nextFrame();
有幾種方法可以實現您要實現的目標,這就是更改部分的方法。 您的方式是做到這一點的一種方式。 也許有一些更好的方法,但是您在這里的方法沒有任何明顯的錯誤。 :)
更好,更干凈的方法是使用Document類。 通過使Form類充當時間軸本身,Document Class將不需要將時間軸引用傳遞給Form類。
這是您的操作方式。 在fla文件中,取消選擇已選擇的任何對象,然后查看屬性工具欄。 在“發布”標題下,您將看到一個可編輯的文本字段,其旁邊寫有“類:”。 輸入與fla相關的類的相對路徑,在這種情況下,這只是類名,因為您沒有定義包。 因此,只需在其中鍵入“表單”即可。 文檔類始終必須擴展DisplayObjectContainer,其中包括MovieClip和Sprite,因此您已經編寫的Form類應該可以正常工作。
完成后,您可以像在問題中一樣調用nextFrame()和prevFrame(),它應該可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.