Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выберает только последний объект. (https://javascript.ru/forum/events/54618-vyberaet-tolko-poslednijj-obekt.html)

hfts_rider 25.03.2015 10:49

Выберает только последний объект.
 
В общем ссылка на песочницу.. (Ссылка)

Функция "draw", коллизия работает только на последний созданный элемент, хотя вроде бы цикл есть для них всех и должно всех проверять.

Подскажите что я не так делаю.

MallSerg 25.03.2015 11:52

if не создает отдельную область видимости
переменная i в разных циклах это одна и та же переменная.

рони 25.03.2015 11:58

Цитата:

Сообщение от hfts_rider
Подскажите что я не так делаю.

нет документации, коментариев, описания, что и зачем творится в вашем коде.

рони 25.03.2015 12:01

MallSerg,
:-? хотелось бы понять и вас :)

hfts_rider 25.03.2015 12:25

Цитата:

Сообщение от MallSerg
if не создает отдельную область видимости
переменная i в разных циклах это одна и та же переменная.

Насчет цикла да.. Но Это просто его дублирование.. Лишняя работа, оптимизация и тд, можно исправить, это тут не при чем..

А вот про if не понял...

MallSerg 25.03.2015 12:28

Цитата:

Сообщение от рони
хотелось бы понять и вас

Я сам себя не понимаю ).
просто невнимательно на код посмотрел проблема похоже не в этом

hfts_rider 25.03.2015 12:35

Вообще смысл только в этих строчках
// enemy
var enemys = [
				new Enemy(20, 20, 1, '#00f', [10, 10], [200, 20]),
				new Enemy(20, 20, 1, '#0f0', [20, 90], [300, 120]),
				new Enemy(20, 20, 1, '#acacac', [50, 170], [150,190]),
				new Enemy(20, 20, 1, '#5577cc', [30, 290], [30, 290]),
				new Enemy(100, 10, 1, '#444', [30, 410], [30, 410])
			 ]

// is_collis
var is_collis = function (a, b) {
	return !( a.pos[0] + a.width <= b.pos[0] || b.pos[0] + b.width <= a.pos[0] || a.pos[1] + a.height <= b.pos[1] || b.pos[1] + b.height <= a.pos[1] );
};

// Draw
var draw = function () {
	ctx.clearRect(0, 0, canv.width, canv.height);

        for(var i = 0; i < enemys.length; i += 1){

		if( !is_collis(player, enemys[i]) ){
			moveToDirect(player);
		}
        }
}


Есть объекты enemy и player, у них есть свойства, но в общем это не важно)
Смысл в том что при проверке "is_collis" оно обнаруживает только последнего enemy, хотя цикл перебора всех enemy добавил...

hfts_rider 25.03.2015 12:36

Хотя может и не в этом проблема.. так как когда player наступает на другие предметы он их проходит но замедляется...

hfts_rider 25.03.2015 12:46

Выходит так что первый объект player пробегает насквозь быстро, на второй медленнее, на следующий еще медленнее и так пока не дойдет до последнего, на нем вообще не проходит.


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