2010-10-15 62 views
0

我有這個捕手遊戲,汽水瓶落在舞臺上,我們用一個角色作爲遊標來捕捉它。但是所有的動作腳本都已內置到文件中。但我被要求將我使用的兩個班級(光標和倒下的汽水瓶)放在外部的班級文件中。如何將內部函數移動到外部ActionScript 3類文件?

而且由於我真的是OOP的新手,我真的不知道該怎麼做。那麼,如何將一個類的內部動作移動到一個外部動作文件中呢?

在先進的感謝,爲考慮到幫助:P

的代碼波紋管是否有幫助。

var koyupo:Koyupo; 
var createsodaID:uint; 
var gamespeed:uint; 
var score:uint=0; 

function startGame() :void { 

    // create the character as a cursor 
    koyupo= new Koyupo(); 
    koyupo.x=200; 
    koyupo.y=270; 
    addChild(koyupo); 
    // listens for a mouse move event to move the koyupo 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, movekoyupo); 
    Mouse.hide(); 
    gamespeed=500; 
    createsodaID=setInterval (createsoda, gamespeed); 
    //setting the ammount displayed on screen to be 0 
    droppedtext.text=caughttext.text='0'; 

} 

function movekoyupo (e:MouseEvent) :void{ 
    // move koyupo according to the mouse movement 
    koyupo.x=this.mouseX; 
    e.updateAfterEvent(); 
} 
function getRandomNumber (low:Number , high:Number):Number 
{ 
    var randomNumber:Number = Math.random()*(high-low) +low; 
    return randomNumber; 
} 
function createsoda() :void { 
    //creating falling soda bottles 
    var soda:Soda= new Soda(); 
    soda.y=-50; 
    trace(getRandomNumber(50,900)); 
    soda.x=getRandomNumber(100 , 500); 
    soda.addEventListener(Event.ENTER_FRAME, dropsoda); 
    addChild(soda); 
} 

function dropsoda (e:Event):void{ 

    var mc:Soda=Soda(e.target); 
    mc.y+=10; 
    if(mc.hitTestObject (koyupo)){ 
     caught (mc); 
    }else if (mc.y>stage.stageHeight) { 
    dropped (mc); 
    } 
} 

function caught (mc:Soda):void{ 
    mc.removeEventListener(Event.ENTER_FRAME,dropsoda); 
    removeChild(mc); 
    caughttext.text=String(Number(caughttext.text)+1); 
     if(caughttext.text=='35'){ 
     proceed(); 
    } 
} 


function dropped (mc:Soda):void{ 
    mc.removeEventListener(Event.ENTER_FRAME,dropsoda); 
    removeChild(mc); 
    droppedtext.text=String(Number(droppedtext.text)+1); 
    if(droppedtext.text=='5'){ 
     gameOver(); 
    } 
} 

function gameOver() :void{ 
    score=Number(caughttext.text); 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,movekoyupo); 
    removeChild(koyupo); 
    clearInterval(createsodaID); 
    removeChild(caughttext); 
    removeChild(droppedtext); 
    while(numChildren>0) { 
     getChildAt (0) .removeEventListener(Event.ENTER_FRAME, dropsoda); 
     removeChildAt(0); 
    } 
    Mouse.show(); 
    gotoAndStop('gameover'); 

} 

function proceed() :void{ 
    score=Number(caughttext.text); 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE,movekoyupo); 
    removeChild(koyupo); 
    clearInterval(createsodaID); 
    removeChild(caughttext); 
    removeChild(droppedtext); 
    while(numChildren>0) { 
     getChildAt (0) .removeEventListener(Event.ENTER_FRAME, dropsoda); 
     removeChildAt(0); 
    } 
    Mouse.show(); 
    gotoAndStop('win'); 

} 
startGame(); 
+0

此代碼目前位於FLA文檔某處的時間軸上嗎? – 2010-10-15 11:06:45

+0

是的,它目前在時間軸上。如果我上傳Flash文件會有幫助嗎? – steph 2010-10-15 11:34:55

回答

0

通過使用「文檔類」整合與外部類個e-閃光IDE(有什麼種類在C/C++的主功能的),即當閃光燈IDE查找設置爲文檔類&一個類調用其構造函數&輸入框架處理程序。

 package classes 
     { 
     public class startGame extends MovieClip 
      {     
       // Class variables can be declared here 

       // Constructor of the document class 
       function startGame() :void {      

       // Function to handle Updates as per frame rate 
       addEventListener(Event.ENTER_FRAME,enterFrameHandler);      

       } 

     } 

    } 

以上可能不會給你任何有用的東西。但我試圖給你一個關於如何移動代碼的想法。它簡單如

  • 創建一個類(startgame), 將其設置爲文檔類。
  • 該構造函數將被稱爲 (上面的startgame函數)。
  • 您可以將事件偵聽器設置爲 構造函數本身中的每一幀更新事物。
  • 包關鍵字允許 地方這個類的所有&隨後 那些到文件系統中的等級秩序 文件夾(包/文件夾名類 這裏)。

我知道這聽起來混亂,如果你是完全用OOP工作& AS3共同爲第一次,但由於它是一個非常廣泛的話題,沒有辦法,但要真正實踐&學OOP概念在最小。因爲我懷疑無論誰(你的客戶或老師)要求你使用課程,只要滿足上述要求即可。

0

當你第一次開始做OOP時,你可能想試試我寫的這個腳本,它將時間線代碼轉換成文檔類。

timeline to document class

它不是完美的,但它工作得很好,只是貼上你的時間表代碼到textarea的,並給出了主類的名稱。它會爲你生成一個doc類。

取出新代碼並將其複製到名爲Main.as的文件中。然後從你的fla中刪除舊的時間線代碼。接下來,單擊舞臺上的某處,然後在「發佈」下的屬性窗口中,您會看到一個名爲「Class」的輸入字段,在輸入字段中鍵入Main並測試您的電影。確保Main.as保存在fla文件旁邊。

您可以將您的原始時間軸代碼與新的文檔類進行比較,以開始感受當您要編寫類時需要什麼。這真的只是冰山一角。圍繞OOP和設計模式纏繞需要時間,但一旦你做了它的價值。

相關問題