Я создаю простую веб-игру, используя холст HTML5 и JavaScript. В настоящее время у меня есть несколько изображений, отображаемых на холсте, каждое из которых представляет предметы, найденные в ресторане быстрого питания. У меня также есть четыре «поля описания», каждое из которых помечено как актив, обязательство, доход или расход.
Каждое изображение принадлежит одному из этих полей описания, и пользователь должен перетащить каждое изображение в правильное поле описания.
Я планирую проверить, перетащил ли пользователь изображение в нужное поле, используя имя переменной JS, содержащей изображение поля, и HTML-тег alt каждого из изображений элемента, т.е. img «стул» имеет тег alt «актив ", а поле описания для активов имеет имя переменной "assetsDescriptionBox", поэтому я бы использовал оператор "if", чтобы определить, было ли изображение, которое перетаскивает пользователь, перетащено в ту же область холста, где находится поле описания активов. отображается, и если у этого изображения есть тег alt «актив», оно исчезнет с холста (и будет добавлено в массив для использования позже в игре).
Однако, если изображение, которое перетаскивал пользователь, не имело alt-тега «актив», но имело какой-то другой тег, то есть «обязательство», то оно было бы перерисовано на холсте там, где оно было изначально нарисовано.
В чем я не уверен, так это в том, как это реализовать. Я взглянул на обнаружение столкновений, и кажется, что один из способов сделать это - использовать JS-метод getBoundingClientRect для получения «внешних границ» изображения, а затем проверить, перекрываются ли внешние границы двух изображений вообще , а если и делают, то что-то делают. Но я не уверен, как использовать этот метод, и не нашел ничего особенно полезного при быстром поиске в Google.
Кто-нибудь знает, будет ли это лучшим способом сделать это? Если да, не могли бы вы опубликовать пример использования метода getBoundingClientRect? Или, если нет, как еще вы могли бы это сделать?
Изменить 17/12/2012 в 16:45
Кстати, я использую библиотеку KineticJS (копия, которую я сохранил локально, чтобы внести одно или два изменения), чтобы добавить функцию перетаскивания, поэтому я предполагаю, что в библиотеке будет что-то, что мне нужно изменить/ добавить, чтобы добавить обнаружение столкновений.
У кого-нибудь есть идеи?
Редактировать 01.01.2013 в 12:35
Привет, спасибо за ваш ответ - похоже, это то, что я хочу сделать. У меня уже есть все изображения, отображаемые на холсте, с четырьмя «статическими», которые нельзя перетаскивать по холсту — это те, которые я хочу использовать в качестве «зон перетаскивания», и их можно перетаскивать. скинь остальные. Я не совсем уверен, как мне добавить функциональность, предоставляемую вашим кодом, к тому, что у меня уже есть? Если вы перейдете по URL-адресу: users.aber.ac.uk/eef8/project/development/featureset2dev, вы сможете увидеть, над чем я уже работал.
Чтобы добавить функцию «зоны сброса» в поля описания, я должен добавить их на холст с помощью строки
var i = new Image(200, 200, 50, 50, 'cat.jpg', 300, 300, 60, 60);
как вы сделали в своем примере?