Settimeout( "speed", "right" )
Как сделать чтобы функция Settimeout через 3 секунды вызвала RIGHT: player.row(2); speed = 10; prop = 'right';
А не по клавишам. $(function() { var player = $('#player1').sprite({ cellSize: [32,32], cells: [4, 3], initCell: [2,0], offset: [4, 0], wrap: true }).css({left: 5, top:440}); var UP = 87, DOWN = 83, LEFT = 65, RIGHT = 68, direct = DOWN, speed = 43, prop = 'top', BOARD_WIDTH = 1000, BOARD_HEIGHT = 1000, char = false; $(window).keydown(function(e) { var key = e.which; if($.inArray(key, [UP,DOWN,LEFT,RIGHT]) >= 0) { if (key == direct) { player.next(); var nextPos = parseInt(player.css(prop),10) + speed; if (prop == 'top') { if(nextPos < 0) nextPos = BOARD_HEIGHT - 1; player.css(prop, nextPos % BOARD_HEIGHT); } else if (prop == 'left') { if(nextPos < 0) nextPos = BOARD_WIDTH - 1; player.css(prop, nextPos % BOARD_WIDTH); } } else { switch(key) { case UP: player.row(3); speed = -10; prop = 'top'; break; case DOWN: player.row(0); speed = 10; prop = 'top'; break; case LEFT: player.row(1); speed = -10; prop = 'left'; break; case RIGHT: player.row(2); speed = 10; prop = 'left'; break; } direct = key; } } else if (key == 13) { char = !char; player.offset(char ? 93 : 0,0); } }); }); <span id="player1" class="player"></span> |
Maxsim_Smolim, тебе нужно имитировать нажатие стрелочки или что?
|
Не по стрелочкам, и по клавишам я знаю как.! Дело в том что когда жмёшь на 65-тую то есть "D" допустим то player1 двигается влево.! А я не могу понять как сделать, что бы не по клавишам он двигался, а например через Settimeout через 3 секунды результат был такой же что жмёшь на "D" то есть через определённое время он, влево двигался, а не по нажатию.!
|
Maxsim_Smolim,
попробуй так: setTimeout(function() { player.row(1); speed = -10; prop = 'left'; }, 2000); Но а вообще, если по хорошему, то каждое движение нужно делать отдельной ф-цией/методом. |
Ну уже что то.! Так он только поворачивается на лева. Но не идёт. А на счёт "отдельной ф-цией/методом" возьму на заметку.!) ))
|
Maxsim_Smolim,
Конечно поворачивается. Ты же эмулируеш быстрое быстрое нажатие, а не keyDown Так что у тебя нажатие происходит долю секунды. А не с задержкой. Будь внимателен к тому что ты вызываешь. |
Так почему не идёт.???
|
Maxsim_Smolim,
Почитал код. Проблема та же. Ты эмулируешь одно событие. А тебе нужно эмулировать залипание. setTimeout(function() { var stopInter = 0; var inerv = setInterval(function() { player.row(1); speed = -10; prop = 'left'; stopInter++; if (stopInter>30)clearInterval(inerv); //Вместо 30 поставь любое число. Смотря сколько тебе нужно что бы он шел. надеюсь пойдёт. }, 10) //Попробуй так же уменьшить интервал. Может пойдёт. }, 2000); Проблема в том что эти строчки эквивалентны быстрому быстрому нажатию кнопки вправо. А не зажатию этой кнопки. Хотя моё решение и представляет из себя быстрое быстрое многократное нажатие клавиши вправо, но может он сдвинется. |
Неа не идёт, уже по всякому разному перепробовал, стоит и всё.!
|
ААААА; Чёрт побери;
Jsовским же языком написано: if (key == direct) Если нажатая стрелочка совпадает с направлением переместить перса. else В противном случае повернуть перса. Вот этот код и поворачивает перса. player.row(2); speed = 10; prop = 'left' А Нам нужно другое. player.next(); var nextPos = parseInt(player.css(prop),10) + speed; if (prop == 'top') { if(nextPos < 0) nextPos = BOARD_HEIGHT - 1; player.css(prop, nextPos % BOARD_HEIGHT); } else if (prop == 'left') { if(nextPos < 0) nextPos = BOARD_WIDTH - 1; player.css(prop, nextPos % BOARD_WIDTH); } Дельше убираем всё лишнее и оборачиваем задержкой. setTimeout(function() { //speed = ; //Можно попробовать поиграться со скоростью. И посмотреть что из этого выйдет. Видимо по структуре кода, игра пошаговая. И зажатия клавиш в принципе нет. player.next(); var nextPos = parseInt(player.css(prop),10) + speed; if(nextPos < 0) nextPos = BOARD_WIDTH - 1; //Не знаю зачем этот if, оставлю его на всякий случай; player.css(prop, nextPos % BOARD_WIDTH); }, 3000); |
Часовой пояс GMT +3, время: 21:32. |