2013-03-26 61 views
1

在創建了兩個類似的自定義AS3可視化組件,離的情況下按鈕的外觀不同,但功能相同,哪種方法更好,從代碼執行,速度,性能方面來看效率更高?AS3:一類具有參數,或兩個類似的類

  1. 創建兩個幾乎相同的類,其中,唯一的區別是在可視組件 ,所以我必須兩次寫按鈕控制功能?
  2. 創建一類,具有參數輸入 限定,我想哪種按鈕具有

1:

package { 
      public class bigButton { 
       public function bigButton() { 
        //make a bigButton 
       } 
      } 
} 

package { 
       public class smallButton { 


        public function smallButton() { 
         //make a smallButton 
        } 
       } 
} 

2:

package { 
     public class OneKindOfButton { 
      public function OneKindOfButton(thisIsBigButton:Boolean) { 
       if (thisIsBigButton == true) { 
        //make it big 
       } else { 
        //make it small 
       } 
      } 
     } 
} 

回答

2

在大約兩個結構(不是這個特殊的例子)的學術上的爭論來看,我不得不認爲,第一個選項是「更好」。雖然基於意見的帖子通常被大多數SO社區視爲毫無價值,但我有幾點要提出並希望聽到反駁的論點。

做這件事,首先它讓我覺得,可能應該有一個基類,它包含了所有的原始功能則一個子類,它調整的功能的一些部分的第二個選項。其次,它需要構造函數中的一個條件(可能在其他地方散佈其他地方)來處理一個類正在處理的兩個場景。我認爲這個問題的一部分是,在AS3中,存在將所有功能和視圖邏輯混合到一個類中的傾向,僅僅因爲它可能並不是一個好主意。

所有的說法,我可能會走的路線有一個基類,其中包含按鈕的功能,然後讓一些子類,在視覺上做不同的事情。

同樣在運行時間效率方面,我相信由於在第二種情況下運行時必須檢查的額外條件,第一種情況會再次變得更好。在任何情況下,當性能和優化成爲問題時,最好只運行一個測試(構建一個測試應用程序,每個測試應用程序可以運行10,000次,運行幾次並獲得平均值)。

+1

同意應該有一個基類,但由於差異是可視的,所以手寫的Actionscript端根本沒有理由解決按鈕類型之間的差異。讓Flash爲庫實例在後臺生成子類。 – 2013-03-26 02:27:29

+1

我跟着艾米。我只是從我的角度思考(Flash Builder開發人員)沒有考慮過Flash IDE和庫。 – shaunhusain 2013-03-26 02:29:48

2

我只想創造一種按鈕類的,因爲你可以借鑑或添加其他顯示對象進去。你甚至不需要一個布爾值來控制它。例如:

public class OneKindOfButton extends Sprite{ 


    public function OneKindOfButton(width:Number,height:Number) { 
     create(width,height); 
    } 


    private function create(width:Number,height:Number):void 
    { 
     graphics.clear(); 
     graphics.beginFill(0xff0000,1.0); 
     graphics.drawRect(0,0,width,height); 
     graphics.endFill(); 
    } 

} 

現在你可以使用這個類來創建任意大小的按鈕。

var myButton:OneKindOfButton = new OneKindOfButton(200,20); 
myButton.x = 100; 
myButton.y = 300; 
addChild(myButton); 

如果您想使用圖片而不是繪製到按鈕中,只需將位圖添加到按鈕精靈中即可。

0

如果兩個按鈕之間的唯一區別是它們的外觀,但所有的邏輯是共享的,那麼你一定要只使用一個通用類。

如果你處理的火花按鈕,那麼你可以簡單地指定爲每個實例(about spark skins)的不同的皮膚。

package 
{ 
    import spark.component.Button; 

    public class MyCustomButton extends Button 
    { 
     static public const SMALL:String = "smallButton"; 
     static public const BIG:String = "bigButton"; 

     static private const DEFAULT_SIZE:String = SMALL; 

     public function MyCustomButton(type:String = DEFAULT_SIZE) 
     { 
      super(); 

      if (type == SMALL) 
      { 
       setStyle("skinClass", SmallButtonSkin); 
      } 
      else 
      { 
       setStyle("skinClass", BigButtonSkin); 
      } 
     } 
    } 
} 

然後,您必須創建到不同的皮膚類別,您將在其中定義按鈕的可視化邏輯。

1

我認爲所有這些答案都錯過了Flash的觀點。首先,我不認爲視圖類應該在在Flash中有構造函數參數,因爲就在蝙蝠之後,你不可能在時間軸/舞臺上使用它們。 Flash播放器不能(也不應該)提供這些構造函數參數。舞臺和時間表是Flash的最大優勢,所以如果你不使用它們,你至少浪費了25%的時間(在你設置x,y,寬度,高度,繪製圖形的時間以及所有的時間那不必要的廢話)。爲什麼要將自己鎖定在一個積極阻止你使用所有工具的設計中?

我這樣做的方式是我有一個這個類定義了按鈕的行爲。然後通過爲大按鈕設置一個庫符號,一個用於小按鈕,一個用於形狀像豬的按鈕,一個用於看起來像太空船的按鈕等。這些符號中的任何一個都會將該單個按鈕類作爲基類(或者更可能只是將其定義爲庫中的Button,因此它們會隱藏SimpleButton)。然後,我只在舞臺上放置了一個庫符號的實例,並且將任何父類中的變量鍵入到我的Button類或SimpleButton中。

這樣做的好處是父類不需要知道具體的實現類型,只是更一般的類型。這意味着庫符號可以「未在N幀中爲Actionscript導出」,並且可以將它們編譯到使用它們的位置。這意味着初始加載時間可以減少到您可能不需要預加載器的程度,這取決於您正在進行的操作。請參閱Combining the Timeline with OOP in AS3

+1

不是每個人都使用Flash創作工具,使用FlashDevelop和as3創建遊戲/應用程序是完全可能的,我也沒有看到使用構造函數參數時遇到任何問題。它並不妨礙你使用舞臺。 – 2013-03-26 14:35:07

+0

可以在FlashDevelop,Flash Builder或您有什麼開始_start_,但是您可能想要移動到更全面的功能。僅僅因爲_你沒有看到任何問題並不意味着它們不存在。你究竟如何將構造函數參數加入你放置在舞臺上的實例? – 2013-03-26 19:16:28

+1

我已經在Flash Develop中開發了完整的應用程序和遊戲,我所說的是,如果您的工作流只是使用資源(可以是swfs或png)並純粹在Flash開發/ Flash Builder中開發,則不必使用Flash Professional 。很顯然,Flash Profiessional中的工作流程可能會有所不同,我不會使用它,所以我無法回答「您如何將構造函數參數導入您放置在舞臺上的實例?'但是,如果您只是在Flash Develop/Flash Builder中完成您的應用程序/遊戲,那麼這不是問題。 – 2013-03-26 19:31:43

相關問題