SVG: Автомобиль на дороге и расписание событий
Демонстрация автомобиля, водящего по дороге и вызывающего событие, когда он добивается своего.
Автомобиль - это образ, который динамично добавляют в декорации. Она поворачивается к табличке «НЬЮ-ЙОРК», которую трогает и наклоняет.
Для реализации этой анимации определяется двойная цель: 1) двигаться вперед и 2) сбить панель, что очень просто записывается в целеориентированном программировании: установить связь И между значением позиции x, которую нужно достичь, и вызовом функции, которая наклоняет панель.
Программа тестирует второй термин отношения И только тогда, когда первый имеет истинное значение. Так что пока положение x не достигнет данного значения, функция не вызывается.
Она возвращает истину при вызове, что приводит к тому, что оба условия будут иметь истинное значение и условие будет выполнено, цель достигнута и анимация прекращается.
=Описание исходного кода...
Составить декор
Красим небо и дорогу двумя прямоугольниками и вставляем два изображения в тег svg для создания статического декора.
<svg id="road" width="640" height="250">
<rect x="0" y="0" width="640" height="240" style="fill:rgb(240,248,255);" />
<rect x="0" y="240" width="640" height="8" style="fill:rgb(0,128,0);" />
<image width="280" height="328" xlink:href="code/tree.svg" transform="scale(0.7) translate(350, 16)"/>
<image id="sign" width="141" height="140" xlink:href="code/sign.svg" transform="scale(0.8) translate(600, 162)"/>
</svg>
Динамическое добавление изображения
Автомобиль не является частью декора, его нормально динамично добавлять.
Создается тег <image>, который будет добавлен к тегу <svg> методом appendChild DOM.
var road = document.getElementById("road");
var car
function addCar() {
car = document.createElementNS('http://www.w3.org/2000/svg','image');
car.setAttributeNS('http://www.w3.org/1999/xlink','href',"code/car.svg");
car.setAttribute("width", 715);
car.setAttribute("height", 296);
car.setAttribute("transform", "scale(0.4) translate(10,305)");
road.appendChild(car);
}
Двигать изображения
Одна функция создается для перемещения автомобиля, другая - для наклонения знака, когда машина его трогает.
function moveCar(x) {
var t = "scale(0.4) translate(" + x + " 305)";
car.setAttribute("transform", t);
}
function toppleSign() {
var sign = document.getElementById("sign");
sign.setAttribute("transform", "scale(0.8) translate(600, 162) rotate(30,60,100)");
return true;
}
Основная программа: просто назначить цель
Основная программа состоит из одной инструкции: определяется цель, которая представлена условием, и говорится, как достичь этой цели: положение x увеличивается и называется функцией moveCar ().
На языке Script :
int x = 10
void move()
to ((x > 720) and toppleSign()) for 20, 4
x + 1
moveCar(x)
/to
return
Преобразовано в JavaScript:
var x=10;
function move()
{
scriptol.goal(function() {
return(((x>720)&&toppleSign()))},20*1000,function(){
x+=1;
moveCar(x);
},4);
return;
}
«For 20,4» в коде Script имеет следующее значение: Анимация имеет время, ограниченное 20 секундами, и каждое движение происходит после задержки в 4 миллисекунды, чтобы сделать скорость не зависящей от скорости компьютера .
Загрузить исходный код и изображения SVG (лицензия MIT):
Файл car.html создается из файла car.sol командой: solj -w car. (См. руководство по языку скриптола).