2014-07-15 161 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