部分感谢来自此处人员的信息,我对Actionscript 3更加满意,但是我遇到了一个非常令人困惑的问题。
该程序(完全在AS3中完成,没有Flash)具有几个不同的屏幕。一个人做音乐,而且效果很好。另一个做视频。显然,当有人从音乐过渡到视频时,我们需要确保音乐已关闭。有一个主屏幕可以处理从一个到另一个的切换。
我以这种方式开始,并且得到“调用可能未定义的方法”的原因很明显。以下是Main类中的内容,其中在类内部但在函数外部具有“private var”部分,而在其中一个函数中具有“music = new MusicPanel”部分:
private var music:MusicPanel;
music = new MusicPanel(trackNames.songNames, trackNames.numSongs);
切换到视频面板时,我在MusicPanel中添加了一个名为StopMusic的公共(public)函数,并在用户转到视频面板时将其调用:
if(music != null)
music.StopMusic();
那有错误:
Call to a possibly undefined method StopMusic
我正在检查以确保音乐不为空,但是该错误似乎并不是一件坏事。所以我将代码更改为:
私有(private)var音乐:MusicPanel = new MusicPanel();
并添加了一个功能,该功能可以将歌曲名称和歌曲数量发送到音乐课。那无济于事-我遇到了同样的错误,实际上试图放入歌曲名称和歌曲数量的函数也出现了错误。
同时,即使我以完全相同的方式进行布局,“视频”面板也不会给我该错误。
private var video:VideoPanel = new VideoPanel;
video.PlayVideo();
当音乐课被称为新类(class)时,我会在音乐屏幕上进行大量的设置,而对视频屏幕的设置则较少。我不确定这是否有所作为。
显然这里有些我不理解的东西。有人知道发生了什么吗?我已经看过许多与此有关的问题,但没有找到答案。我认为我做对了,但是编译器认为我做错了,所以我一定做错了。
稍后注意:一个答案提到了Sprite和MovieClip之间的区别。我尝试了一下,将其更改为MovieClip并没有帮助,有效的VideoPanel扩展了Sprite。
最佳答案
MusicPanel,Sprite或MovieClip的基类是什么?如果是Sprite,请更改为MovieClip并查看其效果。在AS3中,子画面不是动态的,因此不能采用类中非固有的属性。