Actionscript 3 子类中的方法(函数)未在鼠标事件上调用
我的目标是:Actionscript 3 子类中的方法(函数)未在鼠标事件上调用,actionscript-3,flash,Actionscript 3,Flash,我的目标是: 定义一个名为Ship的Sprite子类 在运行时使用事件调用此新类中的函数 似乎我已经知道了如何使用链接的.as文件中的包创建我的Ship类。但我似乎无法访问该类中的函数。有人能看出我做错了什么吗 var ShipMc:Ship = new Ship(); addChild(ShipMc);// This successfully adds an instance, so I know the class is working. addEventListener(MouseEven
var ShipMc:Ship = new Ship();
addChild(ShipMc);// This successfully adds an instance, so I know the class is working.
addEventListener(MouseEvent.CLICK, ShipMc.addShip);//But this doesn't seem to run the function
这段代码可以很好地实例化Sprite,但是Ship.as文件中的代码,特别是函数,不起作用。没有运行时错误,但也没有跟踪到输出窗口
package
{
import flash.display.Sprite
public class Ship extends Sprite
{
public function addShip():void
{
trace("running addShip function")
}
}
}
上一次在flash中对任何东西进行编码时,它是AS2
我要说的是,我试过使用addShip():void
和addShip()
。两者的反应相同。它应该带有:void
,对吗?不管怎样,两个都没有抛出的事实告诉我,我认为这段代码甚至没有被读取
非常感谢您的帮助!把我的头发拔出来。您的代码不工作,因为它包含一些问题,让我们看看 您应该知道您正在附加
MouseEvent。单击事件侦听器到主时间线,该时间线现在还不包含任何可单击的对象(它是空的),因此让我们首先向Ship
类添加一些内容,以避免:
public class Ship extends Sprite
{
// the constructor of your class, called when you instantiate this class
public function Ship()
{
// this code will draw an orange square 100*100px at (0, 0)
graphics.beginFill(0xff9900);
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
}
public function addShip():void
{
trace("addShip function run");
}
}
N.B:您可以将MouseEvent附加到舞台上。单击事件监听器到舞台上,即使舞台上没有任何东西,它也会工作
现在,如果你测试你的应用程序,你会在后台的左上角看到一个可点击的橙色方块,但是编译器会触发一个错误(ArgumentError),因为它正在等待一个侦听器函数(这里的Ship.addShip()
函数),该函数接受一个MouseEvent
对象
因此,为了避免该错误,您的Ship.addShip()
函数可以如下所示,例如:
public function addShip(e:MouseEvent):void
{
trace("addShip function run");
}
那么你的代码应该可以工作了
您还可以通过在主代码中使用另一个侦听器函数来简化工作,该函数可以调用Ship.addShip()
函数,例如:
var ShipMc:Ship = new Ship();
addChild(ShipMc);
addEventListener(MouseEvent.CLICK, onMouseClick);
function onMouseClick(e:MouseEvent): void
{
ShipMc.addShip();
}
有关所有这些的更多信息,您可以查看在哪里可以找到有关AS3的所有需要了解的信息
希望能有所帮助。谢谢。非常感谢。@Neal如果这解决了您的问题,请单击左侧的勾号接受它作为答案。