我有一个班级广场和一个班级圈。
这是我的班级圈子:
public class Circle extends MovieClip
{
var growthRate:Number = 2;
public function Circle()
{
addEventListener(Event.ENTER_FRAME, grow);
}
function grow(e :Event):void
{
e.target.width +=growthRate;
e.target.height +=growthRate;
}
}
我需要停止在Shape中的一个函数内生成圆圈。
public function Square() {
buttonMode = true;
addEventListener(MouseEvent.MOUSE_DOWN, down);
}
protected function down ( event: MouseEvent):void
{
//here i need to stop the circle
}
我不知道如何与Circle类建立关系以阻止圈子的增长。
提前谢谢。
答案 0 :(得分:1)
我不知道如何与Circle类建立关系以阻止圈子的增长。
那是因为你不能使用你现在拥有的代码。你班上没有什么可以从外面(public
)访问,这会阻止增长。但是在你的课堂上甚至没有private
来做这件事。功能根本不存在。
首先,创建所需的功能。并将其提供给public
。
以下是您的Circle
课程的样子:
public class Circle extends Sprite
{
private var growthRate:Number = 2;
public function Circle()
{
// nothing here
// this is just to create a circle graphic, if you have artwork in your library symbol, you do not need this
graphics.beginFill(0xffffff * Math.random());
graphics.drawCircle(0, 0, 10 + 30 * Math.random());
graphics.endFill();
}
public function startGrowing(rate:Number = 0):void
{
if(rate != 0)
{
growthRate = rate;
}
addEventListener(Event.ENTER_FRAME, grow);
}
public function stopGrowing():void
{
removeEventListener(Event.ENTER_FRAME, grow);
}
private function grow(e:Event):void
{
width += growthRate;
height += growthRate;
}
}
注意
Circle
是与库符号关联的类,则不需要此类,因为您已经在符号中创建了图稿。Sprite
。这应该是您的默认超类。使用MovieClip
的唯一真正原因是,如果您有时间轴动画。您发布的内容看起来并不像您所知,所以我建议Sprite
。startGrowing
和stopGrowing
,这些方法正是他们的名字所暗示的。 startGrowing
有一个可选参数,可以以不同的增长率开始增长。e.target
:这里没必要。该代码的简单演示如下:
var circle:Circle = new Circle();
circle.x = 200;
circle.y = 200;
addChild(circle);
circle.startGrowing();
//circle.startGrowing(1); // grow slowly
//circle.startGrowing(5); // grow fast
要停止增长,请停止收听ENTER_FRAME
Event
。
到目前为止,现在对你的实际问题非常好了:
如何与Circle类建立关系
protected function down ( event: MouseEvent):void { //here i need to stop the circle }
你认为你应该在Square
课程中建立这种联系,但你错了。 以这种方式连接两个类是非常的错误做法。您希望这些类尽可能个性化。
把它想象成电话。您的手机是否可以直接通过特定的其他手机?没有。它能够连接到任何手机,这使得它比连接到另一部手机的手机更有用。
使用事件在两个类之外建立连接。这就像你的手机用一个想要拨打的号码打电话到网络。然后,网络会找出如何找到具有该号码的另一部电话以及如何建立连接。
作为一个简短的插曲,所以我们在同一页面上,这是我正在使用的Square
课程:
public class Square extends Sprite
{
public function Square()
{
// nothing here
// this is just to create a circle graphic, if you have artwork in your library symbol, you do not need this
graphics.beginFill(0xffffff * Math.random());
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
}
}
如您所见,它只有一个构造函数,我以编程方式绘制一个矩形。同样,如果您的图书馆符号中有所需的艺术作品,则无需这样做。在这种情况下,构造函数将为空,反过来整个类文件将为空。在这种情况下,您甚至不需要类文件。只需将库符号与名称相关联即可。 Square
只是一个图形资产,没有附加任何代码。
这是一个使用这两个类的完整文档类:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Main extends Sprite
{
private var circle:Circle;
public function Main()
{
circle = new Circle();
circle.x = 200;
circle.y = 200;
addChild(circle);
circle.startGrowing(1);
var square:Square = new Square();
addChild(square);
square.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMouseDown(e:MouseEvent):void
{
circle.stopGrowing();
}
}
}
如您所见,事件侦听器已添加到文档类中,并且事件发生时执行的函数也在Main
中。
这是没有正方形的变体。这次你必须点击圆圈才能阻止它的增长:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Main extends Sprite
{
private var circle:Circle;
public function Main()
{
circle = new Circle();
circle.x = 200;
circle.y = 200;
addChild(circle);
circle.startGrowing(1);
circle.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMouseDown(e:MouseEvent):void
{
circle.stopGrowing();
}
}
}
正如您所看到的,通过事件在两个类之外建立连接可以让您以不同的方式进行连接。就像让手机直接连接到网络而不是另一部手机一样。