Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Bit`s Quest, движение робота по спирали. (https://javascript.ru/forum/misc/46543-bit%60s-quest-dvizhenie-robota-po-spirali.html)

Blondinka 14.04.2014 16:34

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


Хотелось бы узнать, где я допустила ошибку и почему от него так тормозит компьютер.

jsnb 14.04.2014 17:00

Так там же синтаксис не такой...
Вот так примерно должен был выглядеть твой код:
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.

Blondinka 14.04.2014 17:48

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

Ваш код не проходит весь путь. Можно, конечно, скопипастить первую часть, но это будет неоптимальное решение.

Blondinka 14.04.2014 17:57

Цитата:

Хотя там всё равно ошибка в логике работы.
Я, собственно, из-за логики и выбрала "if...else". Буду благодарна, если вы уточните, где именно ошибка.

jsnb 14.04.2014 18:14

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

Цитата:

Сообщение от Blondinka (Сообщение 307648)
Ваш код не проходит весь путь.

Я просто показал как правильно писать надо. Вот код проходящий путь:
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);
  }
});


Часовой пояс GMT +3, время: 22:16.