Создавая инвентарь, столкнулся с одной проблемой. Но обо всем по порядку. Я создал класс ячейки инвентаря Slot, класс предмета Item и класс InventorySystem. Сам инвентарь и все операции в нем реализованы в классе InventorySystem. Сначала я создаю inventory:Vector.<Slot>, который содержит все ячейки из которых состоит инвентарь, за тем пихаю в ячейки вещи. Всё логично и работает. Хорошо. Я подумал, а почему бы не реализовать drag-and-drop.
Подумал немного и сделал так. В цикле прошелся по всем слотам и прицепил к непустым из них слушатели событий
Код: Выделить всё
inventory[i].getItem().addEventListener(ItemEvent.ITEM_PICKED_UP, onItemPickedUp );inventory[i].getItem().addEventListener(ItemEvent.ITEM_DROPPED, onItemDropped);
Код: Выделить всё
this.addEventListener(MouseEvent.MOUSE_DOWN, onItemPickedUp );this.addEventListener(MouseEvent.MOUSE_UP, onItemDropped);
Код: Выделить всё
private function onItemPickedUp(e:MouseEvent):void {this.dispatchEvent(new ItemEvent(ItemEvent.ITEM_PICKED_UP));} private function onItemDropped(e:MouseEvent):void {this.dispatchEvent(new ItemEvent(ItemEvent.ITEM_DROPPED)); }
Код: Выделить всё
protected function onItemPickedUp(e:ItemEvent):void { e.target.startDrag();} protected function onItemDropped(e:ItemEvent):void { ... e.target.stopDrag(); e.target.setCenter(mouseX, mouseY); //Получаем point - координаты центра item for (var i:int = 0; i < numOfSlots; i++) { if(inventory[i].hitTestPoint(e.target.getCenter().x, e.target.getCenter().y, false)) { trace("Пересекает ячейку с id: " + i); ... } }}
Но возникла проблема. Мне понадобилось создать два инвентаря и реализовать drag-and-drop между ними. Но я не знаю как проверять столкновение между слотом и предметом в двух разных InventorySystem. Единственное, что пока пришло на ум - это создать два разных массива внутри одного InventorySystem и тогда тупо
Код: Выделить всё
if(inventory1[i].hitTestPoint(e.target.getCenter().x, e.target.getCenter().y, false)if(inventory2[i].hitTestPoint(e.target.getCenter().x, e.target.getCenter().y, false)