Не удается прочитать свойство OffsetX
Делаю простую игру.
Цель игры — найти клад. Веб-страница будет отображать карту, на которой программа случайным образом выбирает точку, где спрятаны сокровища. Каждый раз, когда игрок кликает по карте, программа сообщает, насколько он близок к кладу. При клике по точке с кладом (или очень близко к ней) игра выводит поздравление и сообщает, сколько кликов ушло на поиски. Почему ругается на OffsetX? http://plnkr.co/edit/n0LaNJsOpwo1QeNGeLEA?p=preview
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Найди клад!</title>
</head>
<body>
<h1 id="heading">Найди клад!</h1>
<img id="map" width=400 height=400
src="http://nostarch.com/images/treasuremap.png">
<p id="distance"></p>
<script src="https://code.jquery.com/jquery-2.1.0.js"></script>
<script>
// Получить случайное число от 0 до size-1
var getRandomNumber = function (size) {
return Math.floor(Math.random() * size);
};
// Вычислить расстояние от клика (event) до клада (target)
var getDistance = function (event, target) {
var diffX = event.offsetX - target.x;
var diffY = event.offsetY - target.y;
return Math.sqrt((diffX * diffX) + (diffY * diffY));
};
// Получить для расстояния строку подсказки
var getDistanceHint = function (distance) {
if (distance < 10) {
return "Обожжешься!";
} else if (distance < 20) {
return "Очень горячо";
} else if (distance < 40) {
return "Горячо";
} else if (distance < 80) {
return "Тепло";
} else if (distance < 160) {
return "Холодно";
} else if (distance < 320) {
return "Очень холодно";
} else {
return "Замерзнешь!";
}
};
// Создаем переменные
var width = 400;
var height = 400;
var clicks = 0;
// Случайная позиция клада
var target = {
x: getRandomNumber(width),
y: getRandomNumber(height)
};
// Добавляем элементу img обработчик клика
$("#map").click(function (event) {
clicks++;
});
// Получаем расстояние от места клика до клада
var distance = getDistance(event, target);
// Преобразуем расстояние в подсказку
var distanceHint = getDistanceHint(distance);
// Записываем в элемент #distance новую подсказку
$("#distance").text(distanceHint);
// Если клик был достаточно близко, поздравляем с победой
if (distance < 8) {
alert("Клад найден! Сделано кликов: " + clicks);
}
</script>
</body>
</html>
|
DivMan,
Интересно, а какой event у вас в строке 74? И по какому поводу эта строка выполняется? |
Цитата:
|
Говорят, то, что ругается т. к. event == undefined. У вас функция getDistanceHint() вызывается один раз, когда вы определяете значение distanceHint. Соответственно, она никак не связана с кликом по карте и event клика в нее не передается.
Но я всё равно не понял |
DivMan,
Цитата:
// Добавляем элементу img обработчик клика
$("#map").click(function (event) {
clicks++;
});
// Получаем расстояние от места клика до клада
var distance = getDistance(event, target);
т.е событие event, оно же click, определяется внутри функции обработчика. На момент исполнения строки var distance = getDistance(event, target);(после загрузки страницы, один раз) эта переменная абсолютно не определена. Кстати, target задастся тоже только один раз при загрузке страницы. PS: в какой, интересно, книге такое написано? |
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 16:12. |