2014-07-15 4 views
1

내 기본 언어가 아니기 때문에 영어가 부족합니다. 최선을 다할 것입니다.생성자 인수 오류

나는이 모든 정보를 어디에서 가져올 지 모르기 때문에 생성자의 인수에 도움이 필요합니다. 여기

내 defaultitem 클래스 :

public class DefaultItem extends MovieClip 
    { 
     private var _id:String; 
     private var _lastX:int; 
     private var _lastY:int; 
     private var _isStackable:Boolean = false; 
     private var _type:String; 
     private var _isDragging:Boolean = false; 
     private var _currentContainer:DefaultContainer; 
     private var _lastContainer:DefaultContainer; 

    public function DefaultItem($id:String, $type:String, $x:int, $y:int) 
    { 
     stop(); 

     id = $id;   
     type = $type; 

     x = $x; 
     y = $y; 
     addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 


    } 

    private function onAddedToStage(e:Event):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
     init(); 
    } 

    public function init():void 
    { 
     buttonMode = true; 
     mouseChildren = false; 

     _lastX = x; 
     _lastY = y; 

     addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler); 
     addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler); 
     this.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler); 
//resolve drag bugs  
    } 

    /** 
    * Mouse Event Handlers 
    */  
    private function onMouseDownHandler(e:MouseEvent):void 
    { 
     isDragging = true; 
        this.mouseEnabled = false; 
        dispatchEvent(new ItemEvent(ItemEvent.ITEM_PICKED_UP, this)); 
    } 

    private function onMouseUpHandler(e:MouseEvent):void 
    { 
     // check if item is being dragged 
     if (isDragging) 
     { 
      isDragging = false; 
      this.mouseEnabled = true; 
      dispatchEvent(new ItemEvent(ItemEvent.ITEM_DROPPED, this)); 
     } 
    } 


    /** 
    * Getters & Setters 
    */ 
    public function get id():String { return _id; } 

    public function set id(value:String):void 
    { 
     _id = value; 
    } 

    public function get lastX():int { return _lastX; } 

    public function set lastX(value:int):void 
    { 
     _lastX = value; 
    } 

    public function get lastY():int { return _lastY; } 

    public function set lastY(value:int):void 
    { 
     _lastY = value; 
    } 


    public function get currentContainer():DefaultContainer { return _currentContainer; } 

    public function set currentContainer(value:DefaultContainer):void 
    { 
     _currentContainer = value; 
    } 

    public function get lastContainer():DefaultContainer { return _lastContainer; } 

    public function set lastContainer(value:DefaultContainer):void 
    { 
     _lastContainer = value; 
    } 

    public function get type():String 
    { 
     return _type; 
    } 

    public function set type(value:String):void 
    { 
     _type = value; 
    } 

    public function get isDragging():Boolean 
    { 
     return _isDragging; 
    } 

    public function set isDragging(value:Boolean):void 
    { 
     _isDragging = value; 
    } 

    /** 
    * Destroys item 
    */ 
    public function destroy():void 
    { 
     buttonMode = false; 
     removeEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler); 
     removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler); 
     this.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler); 
    } 

} 

} 여기

내 항목 클래스 :

public class Slot extends DefaultContainer 
    { 
     // vars 
     private var _id:String;  
     private var _item:DefaultItem; 
     private var _type:DefaultItem; 
     //private var isdragging:DefaultItem; 
     public var defaultitem:DefaultItem = new DefaultItem(id, _type, x, y); 
     // trace(DefaultItem.getisDragging()); 
     //trace(DefaultItem.getisDragging()); 
     /** 
     * Constructor 
     * 
     * @param $id Slot id 
     */ 



    public function Slot($id:String) 
    { 

       addEventListener(MouseEvent.ROLL_OUT, onMouseOutHandler); 
       addEventListener(MouseEvent.ROLL_OVER, onMouseOverHandler); 

     id = $id; 
     setLabel($id); 
     stop(); 
    } 

    /** 
    * Slot Methods 
    */ 
    public function getItem():DefaultItem { return _item; } 

    public override function addItem($item:DefaultItem):void 
    { 
     _item = $item; 
     addChild(_item); 

     // 
     this.gotoAndStop(2); //active slot 
    } 

    public override function removeItem($item:DefaultItem):void 
    { 
     removeChild(_item); 
     _item = null; 

     this.gotoAndStop(1); //default slot 
    } 

    public function hasItem():Boolean 
    { 
     if (_item == null) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

    private function onMouseOutHandler(e:MouseEvent):void { 
       trace("mouseOutHandler"); 
     this.gotoAndPlay("out"); 
    } 

    private function onMouseOverHandler(e:MouseEvent):void { 
       trace("mouseoverHandler"); 
    // if (!isDragging) 
     //{ 
      //trace("drag = "+ isDragging); 
       this.gotoAndPlay("over"); 
     // } 
     //else { 
      //trace("drag = " + isDragging); 
      //this.gotoAndPlay("dragUp"); 
     //  } 
    } 


    /** 
    * Getters & Setters 
    */ 
    public function get id():String { return _id; } 

    public function set id(value:String):void 
    { 
     _id = value; 
    } 

    public function setLabel($label:String):void 
    { 
     this.label.text = $label; 
    } 


    /** 
    * Destroy 
    */ 
    public function destroy():void 
    { 
     removeItem(_item) 
    } 



} 

}

문제가 여기에 공공 var에 defaultitem입니다 : DefaultItem = 새로운 DefaultItem (id, _type, x, y); ID 및 _ 유형이 올바르게 작동하는지 잘 모르겠습니다. 나는이 모든 정보를 얻을 수있는 곳을 알고 싶다. 함수 isdragging을 호출해야하고 var id를 사용한다면 그는 아이템을 대상으로하고 defaultcountainer id는 감사하지 않는다.

답변

1

아이템을 드래그하는 것처럼 보인다. 무언가에, 오해하면 미안 해요.

그러나, 그 경우에, 당신은 같은 것을 사용할 수 있습니다 : 당신이 항목의 ID와 어딘가에 저장 유형이 경우의

var itemID:String = e.target.id; 
var itemType:String = e.target._type; 

합니다. 또한 x와 y는 사용자가 원하는 위치에 따라 다릅니다. 예를 들어

, 당신은 문자를 가지고 당신이 그것을 좋아하는 뭔가 보이는 것, 그에게 칼을주고 싶어 경우 : 다시

//somewhere in your code: 
weapon.id = "Iron Sword"; 
weapon._type = "Sword"; 

//And then when you get to the default item part... 
var itemId:String = e.target.id; 
var itemType:String = e.target._type; 
var defaultitem:DefaultItem = new DefaultItem(itemID,itemType, character.x, character.y); 

를, 내가 오해하는 경우 죄송합니다. 행운을 빈다.

+0

감사하지만 난 내 슬롯에 e.target.id 않으면 때문에 내 가장 큰 문제는 유형과 ID입니다 :

public var defaultitem:DefaultItem; 

다음 슬롯 생성자 :

이 있어야한다 클래스 플래시는 내 슬롯의 ID이며 내 아이템의 ID는 반환하지 않습니다. 이 링크에서 스크립트를 찾을 수 있습니다. http://www.freeactionscript.com/2011/07/drag-drop-and-snap-inventory- 시스템/ –

+0

당신의 해답을 주셔서 감사합니다. 그러나 가장 큰 문제는 타입과 ID입니다. 내 슬롯 클래스에서 e.target.id를 수행하면 e가 내 슬롯의 ID가 아니라 내 항목의 ID를 반환합니다. 함수를 통한 내 드래그 롤의 isdraggin 값을 알고 싶습니다. 함수를 호출하기 전에 인수. 거기에 내가 붙어있어 내 수업 knowlede 제한됩니다 당신은이 링크에서 스크립트를 찾을 수 있습니다 http://www.freeactionscript.com/2011/07/drag-drop-and-snap-inventory-system/ –

2

DefaultItem을 만들고 인스턴스하지만 잘못된 인수를 전달 중입니다. 이 실행이 생성자 전에 생성되므로

public var defaultitem:DefaultItem = new DefaultItem(id, _type, x, y); 

이 ID가 널, _type은 문자열없고 null이며, X는 Y가 범위를 벗어나있다. 답변에 대한

id = $id; 
defaultitem = new DefaultItem(id, _type, x, y); 
//but _type is still not a String and is still null 
+0

당신은 투표 세부 사항에 대한 MNOPYZ의 대답. 나는이 행동이 싫어. 나는 또한 당신의 대답을 뽑았습니다. – helloflash

+0

세부 사항이 그의 대답이 잘못되었습니다 ... – BotMaster