Ну, т.е., как я понял, делаю так.
var i; нажали_кнопку { i++; пускать_пулю(<div id = "pifpaf" + i ...); } Т.е. пускаю пулю со своим идентификатором, но, как в таймере проверять, попала ли пуля? И ещё, как можно узнать, находится ли координаты pifpaf + i находятся в объекте? Т.е. такой объект : var obj = { enemy1: "top-35;left-50", .... }; ? |
dixonich,
На каждую пулю ставим(по кнопке) свой таймер с своим идентификатором После остановки пули убираем таймер - путем clearInterval(Тут идентификатор нужного таймера) |
Цитата:
|
Не могу никак понять :)
Можете примерный псевдокод накидать, пожалуйста. |
Цитата:
setInterval( function() { if($("#pifpaf" + i).css("top") >= "400px" && $("#pifpaf" + i).css("top") <= "405px") {$("#pifpaf" + i).remove(); } }, 1); то есть каждую милисекунду проверяю, попал ли div с нужным идентификатором в область, но почему-то всё не успевает он поймать, если запустить много объектов. если по-тихоньку - всё ловит. i - глобальная переменная, которая плюсуется каждый раз, как запустили пулю. |
dixonich,
1 - cтавь от 12 милисекунд и выше - чаще запускаться не будет 2. Нет идентификатора для каждого таймера - у Вас будет память ужирацо поскольку функция запускается даже после уничтожения объекта слежения! Читайте по ссылке про ID таймера и пример я Вам привёл - пост 10 (к id таймера - добавлем тот же i что и к id шарика тогда функция сможет сама себя делетить после окончания движения шара |
И как мне пристроить i то туда тогда? ))
чтобы было var id + i = |
dixonich,
var IntervalId=[]; function SetTimer(i) { IntervalId[i]= setInterval( function() { if($("#pifpaf" + i).css("top") >= "400px" && $("#pifpaf" + i).css("top") <= "405px") { $("#pifpaf" + i).remove(); clearInterval(IntervalId[i]); } }, 12); } По кнопке запускаем шарик и функцию SetTimer(i) |
Цитата:
function checker(i) { var ids = new Array(); ids[i] = setInterval( function check() { var left = $("#pifpaf" + i).css("left"); var top = $("#pifpaf" + i).css("top"); //var met = parseInt(left) + parseInt(top); var met = parseInt(left) + "|" + parseInt(top); if(met in enemy) { $("#pifpaf" + i).remove(); $("#" + enemy[met]).remove(); clearInterval(ids[i]);} }, 12); } в у enemy такая структура : enemy = {"120|150" : "enemy1" ... } т.е. координаты объекта и его айди. проверяю координаты пули, и если координаты пули в объекте есть, то удаляю по айдишнику противника. но, работает крайне странно, то удаляет, то не удаляет, то пропускает противника, то нет. не подскажите, в чём проблема? |
dixonich,
Не вижу проверки Есть top; left (левый верхний край мишени) и размеры мишени width и height проверяете x > left ?; x < left+ width ? y < top ?; x > top - height ? |
Часовой пояс GMT +3, время: 16:04. |