Здравствуйте.
Возникла проблема при назначении обработчика событию. Обработчику нудно передать событие и счетчик, который нужно замыкать в обработчике.
Вот максимально возможно близкий пример
function constr(){/*...*/}
var control = [
{ //стрелки
left: 37,
up: 38,
right: 39,
down: 40
},
{ //wasd
left: 65,
up: 87,
right: 68,
down: 83
}]
var objs = []
for(var i = 0; i < control.length; i++)
objs.push(new constr())
function hnd(e, arg){
if(!e) e = window.event
var key = e.which || e.keyCode
switch(key){
case control[arg].left:
objs[arg].doSomething1()
break
case control[arg].up:
objs[arg].doSomething2()
break
case control[arg].right:
objs[arg].doSomething3()
break
case control[arg].down:
objs[arg].doSomething4()
break
}
}
/*В цикле каждому объекту назначаем обработчик*/
for(var i = 0; i < control.length; i++){
window.addEventListener("keydown",
function(e, n){
return function(){ hnd(e, n)}
}(/*Здесь видимо должна быть ссылка на событие*/, i)
,false)
}
В обработчике в switch case с объектом под номером arg будут выполняться определенные действия, грубо говоря, несколько идентичных вариантов управления в массиве, соответствующих разным объектам из другого массива, которыми можно будет управлять с клавиатуры, каждому соответствует свой набор клавиш. Событие внутри обработчика нужно знать чтобы определять какая нажата клавиша.
Подскажите пожалуйста, как передать событие + замкнуть аргумент в обработчике? И возможно ли это вообще. Прошу прощения за много букв, ведь наверняка решение очень простое и лежит на поверхности