AS2库存脚本

时间:2014-12-21 18:57:55

标签: actionscript-2

我正在尝试修改下面的脚本,以便它会自动删除“_item”的第一个实例并将其捕捉到最近的“插槽”

代码效果很好,除非我找不到让它放弃项目的方法,而不是用户先点击它。这不是我的剧本。你可以在这里看到它 - http://www.freeactionscript.com/2008/11/drag-drop-snap-inventory-system-v2/

非常感谢任何帮助,谢谢!

/**
* Drag, Drop and Snap Inventory System
*
* Version:  2.0
* Author:   Philip Radvan
* URL:      http://www.freeactionscript.com
*/

var slots_array:Array = new Array(slot0, slot1, slot2, slot3, slot4, slot5, slot6, slot7, slot8, slot9, slot10, slot11, slot12, slot13, slot14, slot15);
var items_array:Array;
var uniqueItemId:Number = 0;
//

//start dragging
function dragItem(_item:Object):Void
{
    //save position before dragging
    _item.nowX = _item._x;
    _item.nowY = _item._y;

    //drag
    _item.startDrag(true);
    _item.onMouseMove = updateDrag;
}
//stop dragging
function dropItem(_item:Object):Void
{
    //stop dragging
    _item.stopDrag();

    //delete mouse event
    delete _item.onMouseMove;

    //run loop on slots array
    for (i=0; i<slots_array.length; i++)
    {
        //set temp slot var
        currentSlot = eval(slots_array[i]);     

        //check slot hittest and slot itemID; if item is over slot and slot is empty, drop
        if ((eval(_item._droptarget) == currentSlot) && (currentSlot.itemID == "empty"))
        {
            //place item in slot
            _item._x = currentSlot._x;
            _item._y = currentSlot._y;

            //update current slot itemID            
            currentSlot.itemID = this;

            //update previous slot itemID
            temp = eval(_item.slotID);
            temp.itemID = "empty";

            //update current item slotID
            _item.slotID = currentSlot.myName;

            //item moved, end loop
            return;
        }
        else
        {
            //return item to previous position if: item is NOT over slot or slot is NOT empty
            _item._x = _item.nowX;
            _item._y = _item.nowY;
        }
    }
}

/*
* updateAfterEven re-renders the screen
*/
function updateDrag():Void
{
    updateAfterEvent();
}

/*
* Create Slots
*/
for (i=0; i<slots_array.length; i++)
{
    var _currentSlot = slots_array[i];
    _currentSlot.itemID = "empty";
    _currentSlot.num = i;
    _currentSlot.myName = "slot"+i;
}


/*
* Create Item
*/
function createInventoryItem()
{
    //attach item to stage
    var _item = attachMovie("item", "item"+uniqueItemId, _root.getNextHighestDepth());

    //set item position
    _item._x = 280;
    _item._y = 320;

    //set item settings
    _item.myName = "item"+uniqueItemId;
    _item.slotID = "empty";

    //make item a button
    _item.onPress = function()
    {
        dragItem(this)
    }
    _item.onRelease = _item.onReleaseOutside = function()
    {
        dropItem(this);
    }

    //add item to array
    items_array.push(_item);

    //update unique Item Id
    uniqueItemId++;
}

//button to create a new inventory item
create_item_btn.onRelease = function()
{
    createInventoryItem();
}

1 个答案:

答案 0 :(得分:0)

修正了它。我没有修改这个,而是编写了自己的。谢谢大家:)

通过将命中测试代码放在影片剪辑“_item”本身上,一个小数组循环将其在剪辑事件加载时的位置排序,并将其捕捉到插槽。超级容易。