我已经环顾了几个不同的线程,似乎找不到任何适合我的东西。我对ActionScript相当新,所以这可能很明显。对于练习,我试图做一个简单的游戏。在游戏中,您可以砍伐树木以添加到“木材”资源中。这是树类:
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Tree extends Sprite
{
//Embed the gameObject image
[Embed(source="../images/tree.png")]
public var GameObjectImage:Class;
public var gameObjectImage:DisplayObject = new GameObjectImage();
public var gameObject:Sprite = new Sprite();
public function Tree()
{
gameObject.addChild(gameObjectImage);
this.addChild(gameObject);
}
}
}
然后,我在Main.as调用'createTree'
中创建一个函数 public function createTree (xPos:int, yPos:int):void
{
var treeName:Tree = new Tree();
treeName.x = xPos;
treeName.y = yPos;
treeName.addEventListener(MouseEvent.CLICK, chopWood);
stage.addChild(treeName);
}
我有一个名为'chopWood'的功能来移除树。
public function chopWood(e:MouseEvent):void
{
wood++;
stage.removeChild(e.relatedObject);
updateResources();
}
在构造函数中,我添加了一个树。
createTree(100,100);
它确实将树添加到x:100 y:100。但Click事件不起作用。如果我手动添加树(即不通过函数)并手动添加偶数监听器,它就可以工作。我认为这是某种封装问题,但我不知道如何解决它。创建树需要通过函数来完成,因为游戏需要在某个时刻添加树。
如何让click事件适用于我添加到舞台的所有树?
答案 0 :(得分:2)
这似乎应该有效。 chopWood方法是否在点击时被调用?在chopWood
的开头跟踪以测试它。
如果正在调用chopWood
,那么我可以看到一件奇怪的事情。我不太确定e.relatedObject
是什么。我想你会想e.currentTarget as Tree
。您也可以省略stage.removeChild(e.relatedObject);
行中的“阶段”。它应该只是作为Main类的子项添加它。