我是这个OOP的新手,我很难理解这一切。
我正在尝试在AS3.0中使用时间轴编码在AS2.0中创建一个简单的whack-a-mole游戏。
我已经阅读了很多论坛,但我仍然不明白我到底做错了什么。
继承我的设置:
mrBunny
的电影剪辑(我的女朋友告诉我把它改成兔子因为痣太难看了。)。现在舞台上有6个mrBunny
个实例,每个实例都名为mrBunny0-5
。mrBunny
符号与com.mrBunny
类相关联。randomPlay();
的方法,我用它来随机化mrBunny
的动画时间。stageBtn
。package com {
import flash.display.SimpleButton; import flash.display.MovieClip; import flash.display.Stage; import flash.events.MouseEvent; public class startBtn extends SimpleButton { //Constructor public function startBtn() { this.addEventListener(MouseEvent.CLICK, startClick); } public function startClick(event:MouseEvent):void { mrBunny0.randomPlay(); mrBunny1.randomPlay(); mrBunny2.randomPlay(); mrBunny3.randomPlay(); mrBunny4.randomPlay(); mrBunny5.randomPlay(); } }
}
我希望能够使用startBtn来启动mrBunny#instances的动画。
据我所知,我并没有完全掌握课程和OOP的情况。
答案 0 :(得分:2)
(兔子太可爱了,不能传递这个问题,所以这里......)
您的代码中有几个关于OOP的问题需要考虑。我会尝试解释一下。
套餐名称:
给出包名称以便唯一地标识类。当您使用具有StringUtils类的第三方库时,请考虑这种情况。你自己也碰巧有一个StringUtils类。你如何将它们存储在工作文件夹中?您如何在代码中解决每个问题?
如名称所示,包提供了一种对类进行分组的机制。因此,当您引用课程时,您可以将其作为com.joemidi.utils.StringUtils
,将另一个称为com.someoneelse.utils.StringUtils
。包名称可以是您喜欢的任何内容,只要它反映文件夹结构即可。但是,作为行业标准,人们在其包名中使用URL,因为它们保证是唯一的。这就是您在许多软件包中看到com
的原因。在您的情况下,最好根据此重构您的包(和文件夹结构)。
舞台实例:
在Flash IDE中创建实例时,必须记住放置它们的位置以及代码是否知道它们。正如@weltraumpirat所说,兔子不是在你的startBtn里面。做你想做的事的正确方法是:
Main:
+ contains the bunnies.
+ listens to startButton for MouseEvent.CLICK
+ when startButton is clicked, manipulates the bunnies.
那就是说,我们意识到还有另一个问题:
不依赖于实例名称:
您应该在代码中实例化(即创建新的)兔子,而不是在Flash IDE中;并从中心变量访问它们。例如:
public class Main extends MovieClip {
var bunnies:Array = new Array();
public function Main() {
createBunnies(7);
startButton.addEventListener(MouseEvent.CLICK, onStartClicked)
}
protected function createBunnies(bunnyCount:int):void {
for (var i:int = 0; i < bunnyCount; i++) {
var bunny:Bunny = new Bunny();
addChild(bunny);
// configure bunny.x, bunny.y, etc. here.
bunnies.push(bunny);
};
}
protected function onStartClicked(e:MouseEvent) {
for (var i:int = 0; i < bunnies.length; i++) {
var bunny:Bunny = bunnies[i];
bunnies.randomPlay();
};
}
在这里,您不再受限于您给兔子的实例名称。 (当然,我只是在这里假设你的舞台结构。)这样,兔子就比他们上面的代码更“独立”了。此外,您可以使用持有人精灵并从那里跟踪兔子,但现在可能有点先进。
希望这些可能对您有用。如果您认真对待这个主题,您可能希望阅读更多有关OOP的内容,特别是有关它的原因,以及关于它的关键术语:去耦,继承,封装等。
答案 1 :(得分:0)
startBtn没有成员mrBunny0-5,主时间轴。请改为root.mrBunny0
。