2014-07-15 157 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) 
    } 



} 

}

的問題是在這裏公共變種defaultitem:DefaultItem =新DefaultItem (id,_type,x,y); 我不確定id和_type是否正常工作。我想知道在哪裏得到所有這些信息,因爲我需要調用函數isdragging,如果我使用var id他目標項目,而不是defaultcountainer id謝謝你們

回答

1

在我看來,你似乎在拖動一個項目如果我誤解了,很抱歉。

但是,在這種情況下,你可以使用類似:

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

這就是如果你有商品的ID和存儲的地方類型。 另外,至於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

謝謝您的回答,但我最大的問題是類型和ID,因爲如果我這樣做,我插槽e.target.id類閃光燈將返回我的插槽的ID,而不是我的項目的ID 您可以在此鏈接中找到腳本http://www.freeactionscript.com/2011/07/drag-drop-and-snap-inventory-系統/ –

+0

感謝您的答案,但我最大的問題是類型和id becaus e如果我在我的插槽類中執行e.target.id flash將返回我的插槽的id,而不是我的項目的id我想知道isdraggin的值用於我的拖動功能....我需要4調用該函數之前的參數。它在那裏我卡住了,我的班級知識有限你可以在這個鏈接找到腳本http://www.freeactionscript.com/2011/07/drag-drop-and-snap-inventory-system/ –

2

您正在創建DefaultItem的實例,但傳遞了錯誤的參數。

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

因爲這是構造器運行之前創建的,編號爲空,_type不是字符串和爲空並且x,y超出範圍。

它應該是:

public var defaultitem:DefaultItem; 

然後在插槽的構造函數:

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