2013-04-23 68 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

相关问题