我正在学习AS3并创建一个简单的'小行星'游戏。 我写了一个简单的线性运动:
package {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class lin extends MovieClip {
private var vx:Number=0;
private var vy:Number=0;
public function lin(x:Number,y:Number,sr:Number,spd:Number)
{
this.rotation=sr;
vy+=Math.sin(degToRad(sr))*spd;
vx+=Math.cos(degToRad(sr))*spd;
this.x=x+vx;
this.y=y+vy;
addEventListener(Event.ENTER_FRAME,loop,false,0,true);
}
public function loop(evt:Event)
{
y+=vy;
x+=vx;
if (outOfBounds())
kill();
}
public function outOfBounds():Boolean
{
return (x>stage.stageWidth || x<0 || y>stage.stageHeight || y<0);
}
public function kill():void
{
if(parent)
parent.removeChild(this);
removeEventListener(Event.ENTER_FRAME,loop);
}
public function degToRad (deg:Number)
{
return deg * Math.PI / 180;
}
}
}
我需要将这种移动行为设置为多个对象(LaserBeam,Asteroids) 我用类'LaserBeam'创建了一个新的MovieClip并写了这个:
package {
import flash.display.MovieClip;
import flash.display.Stage;
import lin;
public class LaserBeam extends MovieClip {
public var LaserBeamInstance:lin;
public var LaserSPD=15;
public function LaserBeam(x,y,r) {
LaserBeamInstance=new lin(x,y,r,LaserSPD);
}
}
}
但是当我尝试运行我的游戏时,它会说:
Line 1 1203: No default constructor found in base class lin.
如何让许多不同的MovieClip共享一种行为?
提前致谢!
UPD:所有项目文件都是here
答案 0 :(得分:0)
尝试从你的lin构造函数中调用super()。这是因为它继承自MovieCLip。在使用super()
调用MovieClip构造函数之前,不会初始化this.rotation等属性您还应该使类名“Lin”遵循标准命名约定。
public function Lin(x:Number,y:Number,sr:Number,spd:Number)
{
super();
this.rotation=sr;
vy+=Math.sin(degToRad(sr))*spd;
vx+=Math.cos(degToRad(sr))*spd;
this.x=x+vx;
this.y=y+vy;
addEventListener(Event.ENTER_FRAME,loop,false,0,true);
}
答案 1 :(得分:0)
我认为你应该尝试:
public function lin(x:Number = 1,y:Number = 1,sr:Number = 1,spd:Number = 1)
我不确切知道发生了什么,但我认为您已经将类“lin”指向了库中某些符号的基类。 因此,这些符号试图通过调用“lin”构造函数来构造自己,但是没有任何参数。
BTW,黄金法则:
- 变量名称应从小写字母开始
来自大写 的类和构造函数的名称答案 2 :(得分:0)
回答你的问题:
如何让许多不同的MovieClip共享一种行为?
您应该阅读有关OOP模式的内容。这本书很棒。
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124
为了回应你的错误,我认为你并没有全面了解我们。错误是指扩展的类lin
,但在代码中没有扩展lin
的类。