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, время: 15:57. |