鼠标事件未调用子类中的方法(函数)
method (function) in subClass not being called on mouse event
我的目标是:
- 定义一个名为 Ship 的 Sprite 子类
- 在运行时使用事件来调用此新 class
中的函数
看来我已经想出了如何使用链接的 .as 文件中的包来创建我的 Ship class。但是我似乎无法访问 class 中的函数。谁能看出我做错了什么?
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 文件中的代码,特别是函数,无法正常工作。没有运行时错误,但也没有追踪到输出 window。
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.CLICK
事件侦听器附加到主时间轴,该时间轴现在还不包含任何可点击对象(它是空的),所以让我们从添加一些东西到您的 Ship
class 来避免:
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.CLICK
事件侦听器附加到舞台上,即使舞台上什么都没有,它也可以工作。
现在,如果您测试您的应用程序,您将在舞台的左上角看到一个可点击的橙色方块,但编译器将引发错误 (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 fundamentals,在那里您可以找到您需要了解的有关 AS3 的所有信息。
希望能帮到你。
我的目标是:
- 定义一个名为 Ship 的 Sprite 子类
- 在运行时使用事件来调用此新 class 中的函数
看来我已经想出了如何使用链接的 .as 文件中的包来创建我的 Ship class。但是我似乎无法访问 class 中的函数。谁能看出我做错了什么?
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 文件中的代码,特别是函数,无法正常工作。没有运行时错误,但也没有追踪到输出 window。
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.CLICK
事件侦听器附加到主时间轴,该时间轴现在还不包含任何可点击对象(它是空的),所以让我们从添加一些东西到您的 Ship
class 来避免:
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.CLICK
事件侦听器附加到舞台上,即使舞台上什么都没有,它也可以工作。
现在,如果您测试您的应用程序,您将在舞台的左上角看到一个可点击的橙色方块,但编译器将引发错误 (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 fundamentals,在那里您可以找到您需要了解的有关 AS3 的所有信息。
希望能帮到你。