2013-04-23 51 views
0

我得到錯誤1026這是「構造函數必須是實例方法」,我不知道爲什麼。我正在創建一個媒體播放器類型的程序,並且在我的音樂部分遇到問題。在此之前,我創建了一個功能音樂播放器,並將代碼複製到我的新項目中。現在唯一不同的是代碼處於狀態而不是main.mxml文件。這是我的代碼下面,我收到錯誤,它說:「公共音樂:聲音;」我不明白爲什麼我得到這個錯誤,任何幫助將不勝感激!在AS3中接收錯誤1026,不知道爲什麼

<fx:Declarations> 
    <fx:XML id="musicXML" source="data/musak.xml" /> 
    <s:XMLListCollection id="musicCollection" source="{musicXML.song}" /> 

</fx:Declarations> 
<s:HGroup> 
    <s:DataGrid id="musicGrid" dataProvider="{musicCollection}" click="onClick()" /> 
    <local:MusicPosition id="mProgress" width="319" height="83"/> 

    <s:VGroup height="55"> 
     <s:Label text="Now playing: {[email protected]}" /> 
     <s:Label id="txtPosition" width="91"/> 
    </s:VGroup> 

</s:HGroup> 
<s:Button x="146" y="93" label="play" click="playMusic()"/> 
<s:Button x="270" y="93" label="pause" click="pauseMusic()"/> 
<fx:Script> 

    <![CDATA[ 

     //set your variables 
     public var music:Sound; 
     [Bindable]public var musicChannel:SoundChannel; 
     public var pausedTime:Number = 0; 

     public function onClick():void { 
      if(musicChannel) { 
       musicChannel.stop(); 

       //clean up the variables 
       music = null; 
       musicChannel = null; 

      } 
      music = new Sound(); 
      music.load(new URLRequest(musicGrid.selectedItem.file.toString())); 
      music.addEventListener(Event.COMPLETE, onMusicLoad); 

     } 

     public function onMusicLoad(e:Event):void { 

      mProgress.update(0); 
      //new channel 
      musicChannel = music.play(); 


     } 

     protected function onE(e:Event):void { 
      if(musicChannel) { 
       txtPosition.text = millisecondsToSeconds(musicChannel.position).toString() + "/" + 
        millisecondsToSeconds(music.length).toString(); 
       mProgress.update(musicChannel.position/music.length); 

       mProgress.alpha = 1; 
      } else 
       mProgress.alpha = 0; 

     } 

     protected function millisecondsToSeconds(milliseconds:Number):Number { 
      return Math.round(milliseconds/1000); 
     } 

     public function pauseMusic():void { 
      if(musicChannel) { 
       pausedTime = musicChannel.position; 
       musicChannel.stop(); 
      } 
     } 

     public function playMusic():void { 
      if(musicChannel) { 
       musicChannel = music.play(pausedTime); 
      } 
     } 
    ]]> 
</fx:Script> 
+1

此代碼所在組件的名稱是什麼?什麼是完整的組件?它是編譯時錯誤還是運行時錯誤?例如,如果這是一個名爲music的類,則可能會嘗試創建一個名爲'music'的變量。 – JeffryHouser 2013-04-23 03:12:56

+0

我......覺得很愚蠢。這個班也被命名爲音樂。更改了變量名稱,它工作。謝謝你爲我指出這一點! – user2220653 2013-04-23 03:37:55

+2

爲了避免將來出現這些問題(儘管顯然不是完全的,要小心你的名字),所有的**類都應該大寫,而所有的**函數和對象名應該是camelcase,但是以一個小寫字母。只有例外與常量有關(通常是全部大寫,並用下劃線分隔) – 2013-04-23 04:13:54

回答

2

命名的事情時要非常小心。你不能在你的類中創建一個與類本身同名的變量或方法。

一個共同的 - 但不是必需的 - 命名規則是這樣的:

  • 使用CamelCase上課。在這種情況下,您的班級將被命名爲Music.mxml或music.as。根據你的代碼,你似乎已經按照這個慣例與你的MusicPosition類。
  • 使用camelcase的方法,但使第一個字母小寫。在這種情況下,您的變量可以被命名爲音樂。或者,您可以創建一個名爲musicPosition的變量。在Flex中記住,MXML標記的id屬性等同於變量名稱。
  • 對於常量,請全部使用大寫。常量通常用作事件類型。

再一次,這些都是[Flex/ActionSCript以外的編程語言]的常見約定,但Flex SDK不需要或實施。

+0

是的,指出這不是必需的。儘管其他開發人員通常期望可能會查看或維護您的代碼。這是個人偏好,儘管它在這一點上被廣泛接受爲標準,並且最好與它配合。 – 2013-04-23 04:46:08

+0

@ Apocalyptic0n3我曾參與很多不遵循命名約定的項目。 – JeffryHouser 2013-04-23 13:10:11

+1

@Marty Wallace對於通過獲取集合方法公開的私有變量,這不僅僅是這種約定嗎? – JeffryHouser 2013-04-23 13:10:35

相關問題