我的目标是:
似乎我已经弄清楚如何使用链接的.as文件中的包创建我的Ship类。但我似乎无法访问该类中的函数。谁能看到我做错了什么?
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
,对吗?无论如何,没有人抛出的事实告诉我,这部分代码甚至没有被阅读,我想。
非常感谢任何帮助!把头发拉出来。
答案 0 :(得分:1)
您的代码无效,因为它包含一些问题,所以让我们看看。
您应该知道您正在将MouseEvent.CLICK
事件监听器附加到主时间轴上,该时间轴现在还没有包含任何可点击的对象(它是空的),所以让我们开始通过在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.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的所有信息。
希望可以提供帮助。