Случайное число в ActionScript 3 - PullRequest
0 голосов
/ 23 января 2011

Я следовал учебному пособию, написанному для Actionscript 2, и успешно преобразовал его в AS 3, однако со второй до последней части я застрял.

Учебное пособие (http://www.cleverpig.com/tutorials/whackapig/whack.htm шаг 8) содержит следующий фрагмент кода:

if (_currentframe==1) {
    // randomly choose whether or not to play
    if (random(100)>97) {
      // should we tease or popup?
      if (random(3)<1) {
        this.gotoAndPlay ("popup");
      } else {
        this.gotoAndPlay (1);
      }
    }
  }

оно предназначено для добавления некоторой случайности к движению персонажа.После некоторого поиска в Google я создал этот код в AS 3, надеясь, что он будет работать.

if (currentFrame==1) {
    // randomly choose whether or not to play
    if(Math.floor(Math.random()*99)-97) {
      // should we tease or popup?
      if (Math.floor(Math.random() *3)-1)
   ) {
        this.gotoAndPlay ("popup");
      } else {
        this.gotoAndPlay (1);
      }
    }
  }

Когда я запускаю программу с этим кодом, вся анимация персонажа воспроизводится один раз (вниз, наполовину вверх, вверх, удар).Предполагается воспроизвести только первые 3 кадра и повторить это.

РЕДАКТИРОВАТЬ:

function random (n:int ) : int {
    return Math.floor (Math.random() * n);
}

if (currentFrame==1) {
    // randomly choose whether or not to play
    if(random(100)): 97 {
      // should we tease or popup?
      if (random(3)): 1
      {
        this.gotoAndPlay ("popup");
      } else {
        this.gotoAndPlay (1);
      }
    }
  }

Символ «дыра», Слой «Actionscript», Кадр 1, Строка 10 1084: Синтаксисошибка: ожидание идентификатора перед двоеточием.Символ «дыра», слой «Actionscript», кадр 1, строка 10 1008: атрибут недействителен.Символ «дыра», слой «Actionscript», кадр 1, строка 12 1084: синтаксическая ошибка: ожидание идентификатора перед двоеточием.Символ «дыра», слой «Actionscript», кадр 1, строка 13 1008: атрибут недействителен.Символ «дыра», Слой «Actionscript», Кадр 1, Строка 15 1083: Синтаксическая ошибка: иначе неожиданно.

Ответы [ 3 ]

3 голосов
/ 23 января 2011

Вы можете легко реализовать свою собственную функцию random () и сохранить весь код точно таким же:

function random (n:int ) : int {
    return Math.floor (Math.random() * n);
}
0 голосов
/ 24 января 2011

Я бы дал -1 автору исходного учебника, поместив числовое случайное выражение в условное выражение, подобное этому.

Чтобы определить результат выражения условного выражения, оно всегда оценивается какBoolean.Если вы введете туда Number / int, оно будет ложным, только если его значение равно 0 (.0).Во всех других случаях (включая отрицательные числа) оно будет оцениваться как true.

Да, вы можете сделать более легкую функцию random (), следуя ответу @ weltraumpirat, но я бы скорее рекомендовал вам взять random ()функция из условного и обернуть его в методе random ().Например:

function feelingLucky(ratio:Number):Boolean {
    return Math.random() <= ratio;
}

Тогда вызов этого метода даст вам лучший синтаксис x из y, например:

if (feelingLucky(97/99)) {
    // you're lucky.
} else {
    // not so lucky.
}

Или другое условное выражение, feelingLucky(1/3).Или попробуйте выигрышную серию с feelingLucky(100/100).

Удачи:)

PS Ваше недавнее редактирование не выполнено из-за двоеточий и цифр: 97 после операторов if.Их там быть не должно.

0 голосов
/ 23 января 2011

Есть ли причина для смены операторов «больше / меньше» на «минус»?Кажется, блоки if будут выполняться для всего, кроме 0.

Формат

if (condition), где условие оценивается как true, false.

Я полагаю, что ваше выражениепреобразован в логический тип.Пример

if (random(100)>97)
- 99> 97 => Да (условие оценивается как истинное)
- 96> 97 => Нет (условие оценивается как ложное)

if (random(100)-97)
99 - 97 = 2
2, представленный как логическое значение, является истинным (Условие оценивается как истинное)
97 - 97 = 0
0, представленный как логическое значение, является ложным (Условие оценивается как ложное)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...