Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.05.2015, 08:14
Новичок на форуме
Отправить личное сообщение для Maxsim_Smolim Посмотреть профиль Найти все сообщения от Maxsim_Smolim
 
Регистрация: 24.10.2014
Сообщений: 9

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>
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2015, 16:06
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Maxsim_Smolim, тебе нужно имитировать нажатие стрелочки или что?
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2015, 20:02
Новичок на форуме
Отправить личное сообщение для Maxsim_Smolim Посмотреть профиль Найти все сообщения от Maxsim_Smolim
 
Регистрация: 24.10.2014
Сообщений: 9

Не по стрелочкам, и по клавишам я знаю как.! Дело в том что когда жмёшь на 65-тую то есть "D" допустим то player1 двигается влево.! А я не могу понять как сделать, что бы не по клавишам он двигался, а например через Settimeout через 3 секунды результат был такой же что жмёшь на "D" то есть через определённое время он, влево двигался, а не по нажатию.!
Ответить с цитированием
  #4 (permalink)  
Старый 25.05.2015, 21:23
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Maxsim_Smolim,

попробуй так:

setTimeout(function() {
    player.row(1);
    speed = -10;
    prop = 'left';
}, 2000);


Но а вообще, если по хорошему, то каждое движение нужно делать отдельной ф-цией/методом.
Ответить с цитированием
  #5 (permalink)  
Старый 25.05.2015, 22:17
Новичок на форуме
Отправить личное сообщение для Maxsim_Smolim Посмотреть профиль Найти все сообщения от Maxsim_Smolim
 
Регистрация: 24.10.2014
Сообщений: 9

Ну уже что то.! Так он только поворачивается на лева. Но не идёт. А на счёт "отдельной ф-цией/методом" возьму на заметку.!) ))
Ответить с цитированием
  #6 (permalink)  
Старый 25.05.2015, 22:26
Аватар для Leon-on12
Аспирант
Отправить личное сообщение для Leon-on12 Посмотреть профиль Найти все сообщения от Leon-on12
 
Регистрация: 07.04.2015
Сообщений: 65

Maxsim_Smolim,
Конечно поворачивается. Ты же эмулируеш быстрое быстрое нажатие, а не keyDown
Так что у тебя нажатие происходит долю секунды. А не с задержкой. Будь внимателен к тому что ты вызываешь.
Ответить с цитированием
  #7 (permalink)  
Старый 25.05.2015, 22:57
Новичок на форуме
Отправить личное сообщение для Maxsim_Smolim Посмотреть профиль Найти все сообщения от Maxsim_Smolim
 
Регистрация: 24.10.2014
Сообщений: 9

Так почему не идёт.???
Ответить с цитированием
  #8 (permalink)  
Старый 26.05.2015, 11:14
Аватар для Leon-on12
Аспирант
Отправить личное сообщение для Leon-on12 Посмотреть профиль Найти все сообщения от Leon-on12
 
Регистрация: 07.04.2015
Сообщений: 65

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);


Проблема в том что эти строчки эквивалентны быстрому быстрому нажатию кнопки вправо. А не зажатию этой кнопки.

Хотя моё решение и представляет из себя быстрое быстрое многократное нажатие клавиши вправо, но может он сдвинется.
Ответить с цитированием
  #9 (permalink)  
Старый 26.05.2015, 21:06
Новичок на форуме
Отправить личное сообщение для Maxsim_Smolim Посмотреть профиль Найти все сообщения от Maxsim_Smolim
 
Регистрация: 24.10.2014
Сообщений: 9

Неа не идёт, уже по всякому разному перепробовал, стоит и всё.!
Ответить с цитированием
  #10 (permalink)  
Старый 26.05.2015, 22:18
Аватар для Leon-on12
Аспирант
Отправить личное сообщение для Leon-on12 Посмотреть профиль Найти все сообщения от Leon-on12
 
Регистрация: 07.04.2015
Сообщений: 65

ААААА; Чёрт побери;
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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка запуска таймера setTimeout Ваяс Events/DOM/Window 3 14.08.2014 13:07
SetTimeout правильное использование nata031189 Общие вопросы Javascript 5 07.07.2012 11:32
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36