0

我正在学习 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)我创建了一个新的 MovieClip 类“LaserBeam”并写了这个:

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:所有项目文件都在这里

4

3 回答 3

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); 
}
于 2013-07-08T17:42:08.770 回答
0

回答你的问题:

我应该怎么做才能让许多不同的 MovieClip 共享一种行为?

您应该阅读 OOP 模式。这本书是一个很好的介绍。

http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124

针对您的错误,我认为您并没有向我们提供全貌。该错误是指类lin被扩展,但在代码中没有类扩展lin

于 2013-07-08T20:53:59.770 回答
0

我认为你应该尝试:

 public function lin(x:Number = 1,y:Number = 1,sr:Number = 1,spd:Number = 1)

我不确切知道发生了什么,但我认为您已将“lin”类作为库中某些符号的基类。因此,该符号尝试通过调用“lin”构造函数来构造自己,但原因是没有任何参数。


顺便说一句,黄金法则:

-变量名应以小写字母开头

-大写构造函数的名称

于 2013-07-08T18:19:34.680 回答