Птицы создаются с использованием спрайтов, при поиске по источнику вы можете найти ссылки на них: 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()
, но это действительно не продвинет вас слишком далеко, так как из-за минификации разные переменные «Имена не дают понять их значение.