Я просмотрел несколько разных потоков и не могу найти ничего, что сработает для меня. Я довольно новичок в ActionScript, так что это может быть очевидно. Для практики я пытаюсь сделать простую игру. В игре вы можете рубить деревья, чтобы добавить свой ресурс. Вот класс дерево:Добавление eventListener к объекту, созданному функцией
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 для работы со всеми деревьями, которые я добавляю на сцену?
Спасибо! Я продолжал предполагать, что ChopWood не вызвали, но это было так. Я изменил его на «e.currentTarget как дерево», и он отлично работает! К сожалению, я не видел «currentTarget» в помощи Adobe и пошел с «relatedObject». – sbatson5
Не беспокойтесь. 'MouseEvent' фактически расширяет' Event', а 'currentTarget' является свойством' Event'. В документах AS3 убедитесь, что вы нажмете «Показать унаследованные общедоступные свойства» в начале списка свойств, чтобы получить полный список доступных свойств. –