суббота, 23 февраля 2013 г.

15.8. Как сыграть со звёздами в «кости»?

Представим звёздочку, висящую на небе. Висит она, висит, спокойно, не моргая. И вдруг ей захотелось вспыхнуть. Вспыхнула — и опять висит, ждёт новой «хотелки».
Наша задача — программно реализовать такое поведение звёздочки.
А для этого дадим звёздочке в руки кубик с точками на гранях (те самые «кости»). И повелим каждый миг бросать кубик. Если выпадет единичка, то звёздочка вспыхнет.
А теперь посчитаем, как часто звёздочка будет вспыхивать. Бросать кубик она может 24 раза в секунду (при стандартной скорости проигрывания ролика). Так как у кубика 6 граней, то единичка будет выпадать в среднем каждый шестой бросок. Таким образом, мы получим 4 выпадания в секунду — слишком часто.
Чтобы уменьшить вероятность выпадания нужной грани, надо увеличить количество граней. Пусть, например, звёздочке надо вспыхивать примерно через 5 секунд. Тогда кубик должен содержать 6·4·5=120 граней (это уже, конечно, не кубик).
С кубиком понятно. Но как это реализовать в сценарии?
А в сценарии роль кубика будет играть генератор случайных чисел (тот самый Math.random()). Условие if(Math.random()<1/120) означает выпадение одной из ста двадцати граней.
  • Дополни сценарий:
Разбор:

    • В 75 строке даём звёздочке команду остановить анимацию.
    • 76 строка: слушатель события ENTER_FRAME, запускающий функцию в 79–87 строках.
    • 81–83 строки:  проверка условия, что случайное число меньше 1/120 (выпала нужная грань 120-гранного кубика), и запуск анимации, если условие истинно.
    • 84–86 строки: после проигрывания анимации её нужно остановить, поэтому здесь мы проверяем, добрался ли плеер до последнего кадра, и останавливаемся, если это так. В этом условии мы используем два новых свойства:
      • star.currentFrame — текущий кадр;
      • star.totalFrames — общее количество кадров в клипе-звёздочке (или номер последнего кадра).
  • Результат:
Чтобы снежинки не мешали разглядывать звёзды, я сделала их более прозрачными. И результат мне понравился. Подумай, как этого можно добиться, и выполни свою задумку.
Вариант со 120-гранным кубиком меня вполне устроил — звёздочки мигают не очень часто, но и не слишком редко. А тебя? Подбери наиболее удачную на твой взгляд частоту мигания.


Комментариев нет:

Отправить комментарий