【发布时间】:2015-12-04 01:11:41
【问题描述】:
所以我正在阅读这本名为“The Web Game Developer's Cookbook”的书,我偶然发现了一段非常困难的代码。它只是一个将图像拖放到“玩家库存”以将其存储在主要游戏角色的包中的程序。 这是代码-
var draggingObject;
function handleDragStart(e) {
draggingObject = this;
e.dataTransfer.setData('text/html', this.innerHTML);
var dragIcon = document.creteElement('img');
var imageName = this.firstChild.id;
dragIcon.src = imageName + '.png';
e.dataTransfer.setDragImage(dragIcon, -10, 10);
}
function handleDragOver(e) {
e.preventDefault();
}
function handleDrop(e) {
e.preventDefault();
if (draggingObject != this) {
var draggingGrandpa =
draggingObject.parentElement.parentElement;
var draggedToGrandpa =
this.parentElement.parentElement;
var draggingObjectId =
draggingObject.firstChild.id;
inventoryObject.add(draggedToGrandpa.id, draggingObjectId);
inventoryObject.remove(draggingGrandpa.id, draggingObjectId);
draggingObject.innerHTML = this.innerHTML;
this.innerHTML =
e.dataTransfer.getData('text/html');
this.classList.remove('empty');
draggingObject.classList.add('empty');
}
}
var itemBoxes = document.querySelectorAll('.inventory-box');
[].forEach.call(itemBoxes, funtion(itemBox) {
itembox.addEventListener('dragstart', handleDragStart);
itembox.addEventListener('dragover', handleDragOver);
itembox.addEventListener('drop', handleDrop);
});
所以首先,我对第 3 行代码感到很困惑,即
draggingObject = this;
那么在这种情况下,{this} 是什么?它只是从 itemBoxes 引用的元素名称还是完全不同的东西? 它说“this”是库存的掉落位置,或者物品将被掉落的位置。
另外,你为什么真的需要“爷爷”?后来在代码中,它谈到了曾祖父母,我以为我们只是在移动保存图像的div。
我的主要问题是第三个函数(handleDrop)。在此函数的第三行中,draggingObject 必须等于 this(因为它在函数 handleDragStart 中设置为等于 this)。在这种情况下,if 块中的代码将不会执行。
有人可以帮我解决这个问题吗?我非常困惑,真的需要帮助。
谢谢!
【问题讨论】:
标签: javascript drag-and-drop inventory game-development