2013-04-09 5 views
1

몇 가지 다른 스레드를 둘러 보았고 나에게 맞는 것을 찾을 수없는 것 같습니다. 나는 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 이벤트가 작동하지 않습니다. 수동으로 트리를 추가 (예 : 함수가 아닌)하고 수동으로 짝수 수신기를 추가하면 작동합니다. 이것이 어떤 캡슐화 문제라고 생각하지만, 어떻게 해결해야할지 모르겠습니다. 놀이는 어떤 시점에서 나무를 추가해야하기 때문에 기능을 통해 나무를 만들어야합니다.

무대에 추가 한 모든 나무에서 클릭 이벤트가 작동하도록하려면 어떻게해야합니까?

답변

2

정상적으로 작동하는 것처럼 보입니다. 클릭시 chopWood 메소드가 호출됩니까? chopWood의 시작 부분에 추적을 넣어 테스트하십시오.

chopWood을 호출하는 경우 하나의 이상한 것을 볼 수 있습니다. 나는 무엇이 e.relatedObject인지 너무 확신하지 못한다. 나는 당신이 e.currentTarget as Tree을 원할 것이라고 생각할 것입니다. stage.removeChild(e.relatedObject); 행에서 '스테이지'를 생략 할 수도 있습니다. 그것은 Main 클래스의 자식으로 추가해야합니다.

+0

감사합니다. 나는 chopWood가 불려지지 않았다고 가정했다. 그러나 그것은 있었다. 나는 그것을 'e.currentTarget as Tree'로 바꾸 었으며 훌륭하게 작동합니다! 안타깝게도 Adobe의 도움으로 'currentTarget'을 보지 못했고 'relatedObject'와 함께갔습니다. – sbatson5

+1

걱정할 필요가 없습니다. 'MouseEvent'는 실제로'Event'를 확장하고'currentTarget'는'Event'의 속성입니다. AS3 문서에서 속성 목록의 맨 앞에있는 "상속 된 Public 속성 표시"를 클릭하여 사용 가능한 속성의 전체 목록을 가져옵니다. –

관련 문제