몇 가지 다른 스레드를 둘러 보았고 나에게 맞는 것을 찾을 수없는 것 같습니다. 나는 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 이벤트가 작동하지 않습니다. 수동으로 트리를 추가 (예 : 함수가 아닌)하고 수동으로 짝수 수신기를 추가하면 작동합니다. 이것이 어떤 캡슐화 문제라고 생각하지만, 어떻게 해결해야할지 모르겠습니다. 놀이는 어떤 시점에서 나무를 추가해야하기 때문에 기능을 통해 나무를 만들어야합니다.
무대에 추가 한 모든 나무에서 클릭 이벤트가 작동하도록하려면 어떻게해야합니까?
감사합니다. 나는 chopWood가 불려지지 않았다고 가정했다. 그러나 그것은 있었다. 나는 그것을 'e.currentTarget as Tree'로 바꾸 었으며 훌륭하게 작동합니다! 안타깝게도 Adobe의 도움으로 'currentTarget'을 보지 못했고 'relatedObject'와 함께갔습니다. – sbatson5
걱정할 필요가 없습니다. 'MouseEvent'는 실제로'Event'를 확장하고'currentTarget'는'Event'의 속성입니다. AS3 문서에서 속성 목록의 맨 앞에있는 "상속 된 Public 속성 표시"를 클릭하여 사용 가능한 속성의 전체 목록을 가져옵니다. –