Как нарисована эта анимация птиц? - PullRequest
13 голосов
/ 12 августа 2011

Я натолкнулся на этот удивительный сайт, созданный на HTML5 и JavaScript.Сердцем веб-сайта являются случайные летающие птицы.У меня мало опыта работы с canvas и HTML5.Я могу взять другой объект, какой-то простой, может быть круг или что-то другое, и перемещать его случайным образом, как это.Однако я не получу этот естественный эффект.Если вы внимательно наблюдаете, как птицы отходят друг от друга, затем приближаются друг к другу, когда они взлетают высоко в небе, они очень быстро машут крыльями, тогда как, когда они летят в горизонтальном направлении, они не машут крыльями и держатэто прямо.Это выглядит потрясающе.

Я хочу знать только 2 вещи на этом сайте, т.е.

1) Является ли птица изображением или создана с использованием пути в html5

2) Как хлопают крылья птицы?Какую логику он должен был написать?Нужно ли изучать какую-нибудь книгу по физике для этого?

Я скачал весь сайт, чтобы увидеть, какой код он должен был написать, но файл js удаляет все пробелы, и поэтому он настолько близок, насколько зашифрован;)а также я не нашел изображения птицы.

Я действительно поражен этим простым, но таким красивым дизайном.Снимаю шляпу перед создателями.

Обновление: Я так рассеян, я забыл поставить ссылку.Очень, очень жаль;)

http://thewildernessdowntown.com/

Ответы [ 6 ]

8 голосов
/ 12 августа 2011

Птицы создаются с использованием спрайтов, при поиске по источнику вы можете найти ссылки на них: 1 , 2 , 3 , 4 .

Что касается движения, оно выглядит как некий алгоритм роения в сочетании с некоторым (по-видимому) искусственным трехмерным эффектом. Всего есть 3 стая, движущихся отдельно.

Код, который обрабатывает спрайт для каждой отдельной птицы (а также других вещей), является классом спрайта:

function sprite() {}
sprite.prototype = {
    create: function(c, b, f) {
        this.image = new Image();
        var a = this;
        this.image.onload = function() {
            a.onImage()
        };
        var e = new Date();
        this.image.src = c + "?" + e.getTime();
        this.step = 0;
        this.running = true;
        this.framerate = f;
        this.size = b;
        this.off_x = 0;
        this.off_y = 0;
        this.loop = true;
        this.offset = 0
    },
    onImage: function() {
        this.steps = this.image.height / this.size
    },
    blit: function(a, c, b, f) {
        if (!this.image.complete) {
            return
        }
        if (this.loop) {
            var e = ((f + this.offset) % 1);
            this.step = Math.floor(e * this.framerate) % this.steps
        } else {
            this.step = Math.floor(f * this.framerate);
            if (this.step > (this.steps - 1)) {
                this.step = this.steps - 1
            }
        }
        a.drawImage(this.image, 0, this.step * this.size, this.image.width, this.size, c - this.image.width / 2 + this.off_x, b - this.size / 2 + this.off_y, this.image.width, this.size)
    },
    start: function() {
        this.running = true
    },
    stop: function() {
        this.running = false;
        this.step = 0
    }
};

Если вы заинтересованы в том, чтобы увидеть, как птицы инициализируются, поищите addBirds1: function(), addBirds2: function() и addBirds3: function(), но это действительно не продвинет вас слишком далеко, так как из-за минификации разные переменные «Имена не дают понять их значение.

7 голосов
/ 12 августа 2011

Ответы на ваши вопросы, насколько я знаю.

Является ли птица изображением или создана с использованием пути в html5

Определенно нет. Проверили все внутри вкладки ресурсов элемента Inspect. Там нет такого изображения. Солнце, дерево и главный логотип - все это pngs.

Как хлопают крылья птицы? Какую логику он должен был написать? Мне нужно изучить какую-нибудь книгу по физике для этого?

Я не уверен в этом. Это почти как эффект анимации во вспышке.
Нет. Вам не нужно читать книгу по физике, но знание физики - отличное дополнение для любого хорошего аниматора.

Вы не можете узнать что-либо еще с этого сайта, так как JavaScript минимизирован. Если вы чувствуете себя вынужденным, используйте http://www.jsbeautifier.org, чтобы приукрашивать сценарий, а затем пройдитесь по нему. ИМХО это будет довольно сложно.

Как вы, возможно, заметили, это из демонстрационного случая Chrome Experiment , где вы могли увидеть некоторые довольно изящные эффекты JavaScript + HTML5. Там вы можете увидеть balldroppings.js Джоша Нимой. Это один из самых популярных. Для достижения этого эффекта он использует processing.js еще одну замечательную библиотеку, созданную Джоном Резигом.

P.s: Я бы сказал, что вам может быть интересно, почему я привел вас на этот сайт. Все будет очевидно, когда вы просмотрите источник на сайте Ball Droppings. JavaScript не минимизирован и адекватно прокомментирован. Это будет отличное место для начала изучения HTML5 + CSS3 + SVG

2 голосов
/ 11 ноября 2011

Птицы на целевой странице (а не те, которые были брошены на карту), по-видимому, созданы с использованием three.js. Вот пример, который выглядит почти идентично: https://github.com/mrdoob/three.js/blob/master/examples/canvas_geometry_birds.html

0 голосов
/ 19 июля 2016

Полагаю, к тому времени, когда вы, возможно, выясните, как это работает, но, поскольку я не могу найти ответ на ваш вопрос в этом посте, я думаю, что следующее поможет:

Это достигается THREEJS .Если вы используете его, тогда воображение - наш единственный предел.Там нет ни вспышки, ни изображений.Если вы хотите использовать его, вы должны добавить

<canvas id='canvasID' width="1680" height="949" style="position: absolute; left: 0px; top: 0px;"></canvas>

в ваш HTML.Установите z-index = -1 (минимум) для этого холста.

var canvas = document.getElementById("canvasID");
renderer = new THREE.WebGLRenderer({ canvas: canvas });

Передайте холст WebGlRenderer.

И все должно быть готово.

Ref: сообщение

0 голосов
/ 29 сентября 2015

Я считаю, что эти птицы точно такие же, как эти на этом сайте .

Они сделаны с использованием удивительного Three.js

0 голосов
/ 13 августа 2013

Вот решение для анимации, если вы планируете использовать Flash:

Flash Tween Birds

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