Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Animate [jQuery] (https://javascript.ru/forum/misc/30477-animate-%5Bjquery%5D.html)

dixonich 06.08.2012 21:22

Ну, т.е., как я понял, делаю так.

var i;

нажали_кнопку {
i++;
пускать_пулю(<div id = "pifpaf" + i ...);
}

Т.е. пускаю пулю со своим идентификатором, но, как в таймере проверять, попала ли пуля?
И ещё, как можно узнать, находится ли координаты pifpaf + i находятся в объекте?
Т.е. такой объект : var obj = { enemy1: "top-35;left-50", .... }; ?

Deff 06.08.2012 21:34

dixonich,
На каждую пулю ставим(по кнопке) свой таймер с своим идентификатором
После остановки пули убираем таймер - путем

clearInterval(Тут идентификатор нужного таймера)

Deff 06.08.2012 21:37

Цитата:

Сообщение от dixonich
И ещё, как можно узнать, находится ли координаты pifpaf + i находятся в объекте?
Т.е. такой объект : var obj = { enemy1: "top-35;left-50", .... }; ?

http://javascript.ru/forum/offtopic/...tml#post189280 Вот идея от Раед -пост 13

dixonich 06.08.2012 21:56

Не могу никак понять :)
Можете примерный псевдокод накидать, пожалуйста.

dixonich 06.08.2012 22:27

Цитата:

Сообщение от Deff (Сообщение 195084)
dixonich,
На каждую пулю ставим(по кнопке) свой таймер с своим идентификатором
После остановки пули убираем таймер - путем

clearInterval(Тут идентификатор нужного таймера)

Пытаюсь сделать так :
setInterval(
	function() { 
		if($("#pifpaf" + i).css("top") >= "400px" && $("#pifpaf" + i).css("top") <= "405px") {$("#pifpaf" + i).remove(); }
	}, 1);


то есть каждую милисекунду проверяю, попал ли div с нужным идентификатором в область, но почему-то всё не успевает он поймать, если запустить много объектов. если по-тихоньку - всё ловит.
i - глобальная переменная, которая плюсуется каждый раз, как запустили пулю.

Deff 06.08.2012 22:52

dixonich,
1 - cтавь от 12 милисекунд и выше - чаще запускаться не будет
2. Нет идентификатора для каждого таймера - у Вас будет память ужирацо поскольку функция запускается даже после уничтожения объекта слежения!
Читайте по ссылке про ID таймера и пример я Вам привёл - пост 10 (к id таймера - добавлем тот же i что и к id шарика
тогда функция сможет сама себя делетить после окончания движения шара

dixonich 07.08.2012 00:25

И как мне пристроить i то туда тогда? ))
чтобы было var id + i =

Deff 07.08.2012 00:54

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)

dixonich 07.08.2012 15:33

Цитата:

Сообщение от Deff (Сообщение 195118)
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" ... }

т.е. координаты объекта и его айди.

проверяю координаты пули, и если координаты пули в объекте есть, то удаляю по айдишнику противника.

но, работает крайне странно, то удаляет, то не удаляет, то пропускает противника, то нет. не подскажите, в чём проблема?

Deff 07.08.2012 15:57

dixonich,
Не вижу проверки
Есть top; left (левый верхний край мишени) и размеры мишени width и height
проверяете
x > left ?; x < left+ width ?
y < top ?; x > top - height ?


Часовой пояс GMT +3, время: 16:04.