В данной модели мячи движутся вертикально, отталкиваясь от поверхности с координатой 0. Это происходит потому, что начальная скорость мячей по координате х равна 0. Если мы изменим начальные скорости мячей по этой координате, сделав их, например, случайными, нам необходимо задать также, как мячи будут себя вести при встрече с потолком и вертикальными стенками.
Вернемся снова к экспериментам с одним мячом. Удалите из окна структурной диаграммы объекта Root объект ball1, а из окна анимации удалите шар с именем ovall, отображавший движение шара ball1.
Сделаем сначала случайными начальные значения скоростей vx и vy мяча. Активизируйте окно структурной диаграммы активного объекта Ball, выделите переменную vx и в поле Начальное значение этой переменной замените значение 0 на значение uniform(-100, 100). Тем самым начальная скорость по координате х у различных экземпляров активного объекта Ball будет выбираться случайно из диапазона (—100, +100) метров в секунду как реализация случайной величины, равномерно распределенной в этом диапазоне. То же самое сделайте для переменной vy.
Для учета отталкивания мяча от потолка нужно событие встречи препятствия мячом на переходе стейтчарта изменить. Размеры поля, в котором двигаются мячи, установлены 500x500 (м). В поле Событие окна свойств перехода стейтчарта активного объекта Ball выражение:
у <= r && vy < О
следует дополнить:
у <= r && vy < 0 || у >= 500-r && vy > 0
Действие, которое выполняется и в том, и в другом случае, будет тем же: изменение направления скорости vy с частичной ее потерей.
Для того чтобы учесть отталкивание мяча от вертикальных стен, нужно учесть это событие в стейтчарте введением дополнительного перехода. Сделайте ОКНО СТеЙТЧарта аКТИВНЫМ И добавьте К СОСТОЯНИЮ Movement ДОПОЛНИ-
тельный переход, используя иконку панели инструментов. Щелкнув
мышью на этой иконке, поместите указатель мыши на границе состояния и продвигайтесь по полю окна стейтчарта, щелкая кнопкой мыши в тех местах, где должны располагаться точки изгиба линии перехода. Двойной щел-чок мыши заканчивает рисование перехода стрелкой (рис. 4.16).
В появившемся справа окне свойств этого перехода в поле Происходит нуж-но выбрать вариант По событию, в поле Событие следует вставить условие наступления события касания мяча о вертикальную стенку:
х <= r && vx < 0 || х >= 500-r && vx> О
а в поле Действие установить действия изменения направления составляю
щей vx скорости мяча и моментальное изменение цвета мяча при столкно-
вении: '
vx=-(1-k)*vx;
tBounce = getTime();
Это изображено на рис. 4.17.
Запустите модель на исполнение. Используя слайдеры, можно изменять радиус мяча, коэффициент потери скорости при встрече с препятствием, ускорение свободного падения, превращая мяч в воздушный шар при д<о или в биллиардный шар при д=о. Построенная вами модель должна соответствовать модели Balls2 папки Part 1.