Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.04.2014, 16:34
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Bit`s Quest, движение робота по спирали.
Добрый день. У меня получился относительно короткий код. Я этому очень рада, но он не работает и постоянно уведомляет о нехватке ";".
Я понятия не имею, куда тут еще прилепить ";". Даже, если на каждой строке разместить по одной ";", он не работает (правда сообщение изчезает).
http://bitsquest.bitbucket.org/index.html#5

this.on("start", function(contact){
        if (this.on("sensor:bottom")){
          this.thrusters.left(true);
          this.thrusters.top(false);

        }else if (this.on("sensor:right")){
          this.thrusters.bottom(true);
          this.thrusters.left(false);

        }else if (this.on("sensor:top")){
          this.thrusters.right(true);
          this.thrusters.bottom(false);

        }else if (this.on("sensor:left")){
          this.thrusters.top(true);
          this.thrusters.right(false);
        }});


Хотелось бы узнать, где я допустила ошибку и почему от него так тормозит компьютер.
Ответить с цитированием
  #2 (permalink)  
Старый 14.04.2014, 17:00
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Так там же синтаксис не такой...
Вот так примерно должен был выглядеть твой код:
this.on("start", function(){
 this.thrusters.top(true); 
});

this.on('sensor:top', function(contact) {
  this.thrusters.right(true);
  this.thrusters.bottom(false);
});

this.on('sensor:right', function(contact) {
  this.thrusters.bottom(true);
  this.thrusters.left(false);
});

this.on('sensor:bottom', function(contact) {
  this.thrusters.left(true);
  this.thrusters.top(false);
});

this.on('sensor:left', function(contact) {
  this.thrusters.top(true);
  this.thrusters.right(false);
});

Хотя там всё равно ошибка в логике работы. И там же написано: "The value of contact will be true when contact has been made and false when it has been lost." Т.е. можно детекстиль отрыв от поверхности через проверку contact на false.

Последний раз редактировалось jsnb, 14.04.2014 в 17:06.
Ответить с цитированием
  #3 (permalink)  
Старый 14.04.2014, 17:48
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Спасибо. Но это не совсем то, что я хотела: я так и не поняла, что не так с синтаксисом и почему "if ... else" не работает.

Ваш код не проходит весь путь. Можно, конечно, скопипастить первую часть, но это будет неоптимальное решение.
Ответить с цитированием
  #4 (permalink)  
Старый 14.04.2014, 17:57
Профессор
Отправить личное сообщение для Blondinka Посмотреть профиль Найти все сообщения от Blondinka
 
Регистрация: 21.03.2014
Сообщений: 173

Цитата:
Хотя там всё равно ошибка в логике работы.
Я, собственно, из-за логики и выбрала "if...else". Буду благодарна, если вы уточните, где именно ошибка.
Ответить с цитированием
  #5 (permalink)  
Старый 14.04.2014, 18:14
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Так ваши if..else не рабочие потому что непонятно что проверяют. Или я чего-то не понимаю т.к. вижу эту игрушку первый раз в жизни.
Насколько я понял this.on - вешает обработчик на "событие" соприкосновения со стеной т.е. функция которая передана вторым параметром выполнится когда робот соприкасается с соответствующими стенами. При этому первый аргумент функции получает значени true если произошло событие соприкосновения по стеной и false если произошел отрыв от стены. Соответственно по этим событиям и надо ориентироваться.

Сообщение от Blondinka Посмотреть сообщение
Ваш код не проходит весь путь.
Я просто показал как правильно писать надо. Вот код проходящий путь:
this.on("start", function(){
  this.thrusters.top(true); 
});

this.on('sensor:top', function(contact) {
  if (contact) {
    this.thrusters.right(true);
    this.thrusters.bottom(false);
  }
});

this.on('sensor:right', function(contact) {
  if (contact) {
    this.thrusters.bottom(true);
    this.thrusters.left(false);
  }
});

this.on('sensor:bottom', function(contact) {
  if (contact) {
    this.thrusters.left(true);
    this.thrusters.top(false);
  }
});

this.on('sensor:left', function(contact) {
  if (contact) {
    this.thrusters.top(true);
    this.thrusters.right(false);
  }
});
Ответить с цитированием
Ответ



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

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