(рддрд╕реНрд╡реАрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдмрдзрд╛рдИ рд╣реИ)рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ : рдПрдХ рд╕реБрдВрджрд░ рддрд╕реНрд╡реАрд░ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рдФрд░ рд╡рд╕рдВрдд рд╕рдВрдЧреАрдд рдХреЗ рд▓рд┐рдП рдЙрдбрд╝рд╛рди рддрд┐рддрд▓рд┐рдпреЛрдВред (
рдореИрдВ рддреБрд░рдВрдд рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреЛрд╕реНрдЯрдХрд╛рд░реНрдб рдХрд╛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рднреА рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛ред рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдореЗрдВ рддрд┐рддрд▓реА рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рдкрд╛рда ред )
рдорд╛рдирдХ рд╕реАрдПрд╕рдПрд╕ рдЯреВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо
рдкреЛрд╕реНрдЯрдХрд╛рд░реНрдб рдХреЛ
рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╕ рдФрд░
рдЗрдЬреАрд▓рдЬреЗрдПрд╕ рдПрдиреАрдореЗрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рддрд┐рддрд▓реА рдПрдиреАрдореЗрд╢рди
рд╣рдо рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрд┐рддрд▓рд┐рдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрдВрдЦреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдЪрд┐рддреНрд░ рд╣реИрдВ:

рдЪрд░рдг 1. рдкрдВрдЦреЛрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛
рдЖрдЗрдП рдкрдВрдЦреЛрдВ рдХреЗ рд╕рд┐рд░реНрдл рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЦреАрдВрдЪрдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдЦ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рдмрд┐рдЯрдореИрдк рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдПрдВрдЧреЗред рдкрдВрдЦреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
ред рдЗрдЬреАрд▓рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕реНрдЯреЗрдЬ рдХреНрд▓рд╛рд╕ рд╣реИред
рдЫрд╡рд┐рдпрд╛рдБ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВрдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рдЯрдХрд╛рдХрд░ рдорд╛рдирдХ
рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
// loading left wing
leftImg = new Image();
leftImg.src = leftSrc;
leftImg.onload = onWingImageLoaded;
// loading right wing
rightImg = new Image();
rightImg.src = rightSrc;
rightImg.onload = onWingImageLoaded;
(рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдПрдХ рдмреВрдЯ рддреНрд░реБрдЯрд┐ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред)
рддрд┐рддрд▓реА рд╡рд┐рдзрд╛рдирд╕рднрд╛рджреЛрдиреЛрдВ рдкрдВрдЦреЛрдВ рдХреЛ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
// create a new container for butterfly wings
var butterfly = new Container();
// create wings
var lWing = new Bitmap(leftImg);
var rWing = new Bitmap(rightImg);
// assemble a batterfly
butterfly.addChild(lWing);
butterfly.addChild(rWing);
рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдЦ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рдкрдВрдЬреАрдХрд░рдг рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдиреНрд╣реЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдШреБрдорд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
// change wings registration point inside container
lWing.regX = lWing.image.width;
lWing.regY = lWing.image.height / 2;
rWing.regX = 0;
rWing.regY = rWing.image.height / 2;
рддрд┐рддрд▓реА рдХрд╛ рд╕реНрдерд╛рдирдЕрдЧрд▓рд╛, рддрд┐рддрд▓реА рдХреЛ рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЗрд╕реЗ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦреЗрдВ рдФрд░ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ:
// add butterfly to stage
stage.addChild(butterfly);
// change batterfly position
butterfly.x = canvas.width * Math.random() | 0;
butterfly.y = canvas.height * Math.random() | 0;
// redraw stage
stage.update();
рдЖрдо рдХреЛрдбvar leftSrc = "../images/Cypres 1.png" ;
var rightSrc = "../images/Cypres 2.png" ;
var leftImg;
var rightImg;
var loadedWings = 0;
function init() {
// create a new stage and point it at our canvas:
canvas = document .getElementById( "canvas" );
stage = new Stage(canvas);
// loading left wing
leftImg = new Image();
leftImg.src = leftSrc;
leftImg.onload = onWingImageLoaded;
// loading right wing
rightImg = new Image();
rightImg.src = rightSrc;
rightImg.onload = onWingImageLoaded;
}
function onWingImageLoaded( event ) {
loadedWings++;
if (loadedWings == 2)
onButterflyReady();
}
function onButterflyReady() {
// create a new container for butterfly wings
var butterfly = new Container();
// create wings
var lWing = new Bitmap(leftImg);
var rWing = new Bitmap(rightImg);
// assemble a batterfly
butterfly.addChild(lWing);
butterfly.addChild(rWing);
// change wings registration point inside container
lWing.regX = lWing.image.width;
lWing.regY = lWing.image.height / 2;
rWing.regX = 0;
rWing.regY = rWing.image.height / 2;
// add butterfly to stage
stage.addChild(butterfly);
// change batterfly position
butterfly.x = canvas.width * Math.random() | 0;
butterfly.y = canvas.height * Math.random() | 0;
// redraw stage
stage.update();
}
рдПрдХ рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг 1 редрдЪрд░рдг 2. рдЕрдкрдиреЗ рдкрдВрдЦреЛрдВ рдХреЛ рдлреНрд▓реИрдк рдХрд░реЗрдВ
рдШрдбрд╝реАрдЖрдк рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдирд┐рдореЗрд╢рди рдпрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдЬреАрд▓рдЬреЗрдПрд╕ рдореЗрдВ, рдЖрдк рджреГрд╢реНрдп рдЕрдкрдбреЗрдЯ рдЯрд╛рдЗрдорд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рдХрджрдо рдкрд░ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдпрд╣ рдПрдХ рдЧреЗрдо рд╕реНрдЯреЗрдЯ рдЕрдкрдбреЗрдЯ рдЪрдХреНрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдХреЛ рдЯрд╛рдЗрдорд░ рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред)
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЯрд╛рдЗрдорд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрд╡реГрддреНрддрд┐ рднреА рд╕реЗрдЯ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ):
Ticker.addListener(window);
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЯрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рджреГрд╢реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
// update scene on each tick
function tick() {
butterfly.move()
stage.update();
}
рдкрдВрдЦреЛрдВ рдХреЗ рдХрджрдо-рджрд░-рдЪрд░рдг рдПрдиреАрдореЗрд╢рдирдПрдХ рддрд┐рддрд▓реА рдХреЗ рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рднреА рдлрдбрд╝рдлрдбрд╝рд╛рддреЗ рдкрдВрдЦреЛрдВ рдФрд░ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬреЛ рддрд┐рддрд▓реА рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреИрдорд╛рдиреЗ (рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреА рддрд┐рддрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреЗрд▓ = 1.0):
// initial scale
butterfly.scale = butterfly.lWing.scaleX
= butterfly.lWing.scaleY = butterfly.rWing.scaleX
= butterfly.rWing.scaleY = 0.5 + 0.2 * Math.random();
рдХреНрд╖реИрддрд┐рдЬ (рдПрдХреНрд╕) рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдВрдЧ рдПрдирд┐рдореЗрд╢рди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдЖрд╡рдзрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рддреНрд░рд┐рдХреЛрдгрдорд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдиреАрдореЗрд╢рди рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
// animation steps
butterfly.step = butterfly.steps = 40 + 60 * Math.random();
рдЕрдм рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд▓рд╣рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
butterfly.move = function () {
var wingAngle = (butterfly.steps - butterfly.step) / butterfly.steps * Math.PI;
butterfly.lWing.scaleX = butterfly.rWing.scaleX
= butterfly.scale * (0.4 + 0.6 * Math.abs(Math.cos(wingAngle * 4)));
butterfly.step--;
}
рдЖрдо рдХреЛрдбvar leftSrc = "../images/Cypres 1.png" ;
var rightSrc = "../images/Cypres 2.png" ;
var leftImg;
var rightImg;
var loadedWings = 0;
var butterfly;
var butterflyLoaded = false ;
function init() {
// create a new stage and point it at our canvas:
canvas = document .getElementById( "canvas" );
stage = new Stage(canvas);
// loading left wing
leftImg = new Image();
leftImg.src = leftSrc;
leftImg.onload = onWingImageLoaded;
// loading right wing
rightImg = new Image();
rightImg.src = rightSrc;
rightImg.onload = onWingImageLoaded;
// subscribe to Ticker
Ticker.addListener(window);
}
function onWingImageLoaded( event ) {
loadedWings++;
if (loadedWings == 2)
onButterflyReady();
}
function onButterflyReady() {
// create a new container for butterfly wings
butterfly = new Container();
// create wings
butterfly.lWing = new Bitmap(leftImg);
butterfly.rWing = new Bitmap(rightImg);
// assemble a batterfly
butterfly.addChild(butterfly.lWing);
butterfly.addChild(butterfly.rWing);
// change wings registration point inside container
butterfly.lWing.regX = butterfly.lWing.image.width;
butterfly.lWing.regY = butterfly.lWing.image.height / 2;
butterfly.rWing.regX = 0;
butterfly.rWing.regY = butterfly.rWing.image.height / 2;
// add butterfly to stage
stage.addChild(butterfly);
// change batterfly position
butterfly.x = canvas.width * Math.random() | 0;
butterfly.y = canvas.height * Math.random() | 0;
// initial rotation
butterfly.lWing.rotation = butterfly.rWing.rotation
= butterfly.angle = 360 * Math.random() | 0;
// initial scale
butterfly.scale = butterfly.lWing.scaleX
= butterfly.lWing.scaleY = butterfly.rWing.scaleX
= butterfly.rWing.scaleY = 0.5 + 0.2 * Math.random();
// animation steps
butterfly.step = butterfly.steps = 40 + 60 * Math.random();
// move butterfly
butterfly.move = function () {
var wingAngle = (butterfly.steps - butterfly.step) / butterfly.steps * Math.PI;
butterfly.lWing.scaleX = butterfly.rWing.scaleX
= butterfly.scale * (0.4 + 0.6 * Math.abs(Math.cos(wingAngle * 4)));
butterfly.step--;
}
butterflyLoaded = true ;
// redraw stage
stage.update();
}
// update scene on each tick
function tick() {
if (butterflyLoaded && butterfly.step >= 0) {
butterfly.move()
}
stage.update();
}

рдПрдХ рд╕рдорд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг 2 редрдЪрд░рдг 3. рддрд┐рддрд▓реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
рдЕрдм рдЬрдм рд╣рдордиреЗ рддрд┐рддрд▓реА рдХреЛ рдЗрд╕рдХреЗ рдкрдВрдЦреЛрдВ рдХреЛ рдлрдбрд╝рдлрдбрд╝рд╛рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░реЛрдЯреЗрд╢рди рдХреЗ рдХреЛрдг рдФрд░ рдЖрдВрджреЛрд▓рди рдХреА рджрд┐рд╢рд╛ рдФрд░ рдЧрддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛:
// initial rotation
butterfly.lWing.rotation = butterfly.rWing.rotation
= butterfly.angle = 360 * Math.random() | 0;
// movement direction
butterfly.direction = 8 * Math.random() - 4.0;
// movement speed
butterfly.speed = 5 * Math.random() + 5;
рдмрдЯрд░рдлреНрд▓рд╛рдИ ред рд▓реЛ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдпрд╣ рд░реЛрдЯреЗрд╢рди рдПрдВрдЧрд▓ рдореЗрдВ рдПрдХ рдмрджрд▓рд╛рд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
butterfly.angle += butterfly.direction + (5.0 * Math.random() - 2.5);
butterfly.lWing.rotation = butterfly.rWing.rotation = butterfly.angle;
рдФрд░ рдЖрдВрджреЛрд▓рди рд╡реГрджреНрдзрд┐:
butterfly.x += (butterfly.speed * Math.sin((butterfly.angle) / 180.0 * Math.PI));
butterfly.y -= (butterfly.speed * Math.cos((butterfly.angle) / 180.0 * Math.PI));
рддрд┐рддрд▓реА рдХреЛ рдЙрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╕рдорд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг 3 редрдЪрд░рдг 4. рд╣рдо рдХреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВ
рддрдм рд╕реЗ рд╣рдореЗрдВ рддрд┐рддрд▓рд┐рдпреЛрдВ рдХреЗ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдПрдХ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рддрд┐рддрд▓реА рдХреЗ рдХрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ (рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдорд╛рдЙрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреА рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреА рдЧрдИ рд╣реИ):
( function (window) {
Butterfly = function (leftImg, rightImg) {
this .initialize();
this .initButterfly(leftImg, rightImg);
}
var p = Butterfly.prototype = new Container();
p.lWing = null ;
p.rWing = null ;
p.angle = 0;
p.direction = 0;
p.speed = 0;
p.steps = 0;
p.step = -1;
p.initButterfly = function (leftImg, rightImg) {
// create wings
this .lWing = new Bitmap(leftImg);
this .rWing = new Bitmap(rightImg);
// change wings registration point inside container
this .lWing.regX = this .lWing.image.width;
this .lWing.regY = this .lWing.image.height / 2;
this .rWing.regX = 0;
this .rWing.regY = this .rWing.image.height / 2;
// initial rotation
this .lWing.rotation = this .rWing.rotation = this .angle = 360 * Math.random() | 0;
// initial scale
this .scale = this .lWing.scaleX = this .lWing.scaleY = this .rWing.scaleX = this .rWing.scaleY = 0.5 + 0.2 * Math.random();
// assembling batterfly
this .addChild( this .lWing);
this .addChild( this .rWing);
this .mouseEnabled = true ;
this .onMouseOver = function (e) { this .reset(); };
};
p.reset = function () {
// animation steps
this .step = this .steps = 40 + 60 * Math.random();
// movement direction
this .direction = 8 * Math.random() - 4.0;
// movement speed
this .speed = 5 * Math.random() + 5;
};
p.move = function () {
// update rotation
this .angle += this .direction + (5.0 * Math.random() - 2.5);
this .lWing.rotation = this .rWing.rotation = this .angle;
// update wings
var wingAngle = ( this .steps - this .step) / this .steps * Math.PI;
this .lWing.scaleX = this .rWing.scaleX = this .scale * (0.4 + 0.6 * Math.abs(Math.cos(wingAngle * 4)));
// update position
this .x += ( this .speed * Math.sin(( this .angle) / 180.0 * Math.PI));
this .y -= ( this .speed * Math.cos(( this .angle) / 180.0 * Math.PI));
this .step--;
};
p.isActive = function () {
return this .step >= 0;
};
window.Butterfly = Butterfly;
} (window));
рдХреЛрдб рдХрд╛ рд╢реЗрд╖ рдЯреБрдХрдбрд╝рд╛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ рдорд╛рдЙрд╕ рд╕реЗ рдИрд╡реЗрдВрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
var leftSrc = "../images/Cypres 1.png" ;
var rightSrc = "../images/Cypres 2.png" ;
var leftImg;
var rightImg;
var loadedWings = 0;
var butterfly;
var butterflyLoaded = false ;
function init() {
// create a new stage and point it at our canvas:
canvas = document .getElementById( "canvas" );
stage = new Stage(canvas);
stage.enableMouseOver(10);
// loading left wing
leftImg = new Image();
leftImg.src = leftSrc;
leftImg.onload = onWingImageLoaded;
// loading right wing
rightImg = new Image();
rightImg.src = rightSrc;
rightImg.onload = onWingImageLoaded;
// subscribe to Ticker
Ticker.addListener(window);
}
function onWingImageLoaded( event ) {
loadedWings++;
if (loadedWings == 2)
onButterflyImagesReady();
}
function onButterflyImagesReady() {
// create a new container for butterfly wings
var butterfly = new Butterfly(leftImg, rightImg);
// add butterfly to stage
stage.addChild(butterfly);
// change batterfly position
butterfly.x = canvas.width * Math.random() | 0;
butterfly.y = canvas.height * Math.random() | 0;
butterfly.reset();
butterflyLoaded = true ;
// redraw stage
stage.update();
}
// update scene on each tick
function tick() {
if (butterflyLoaded && butterfly.step >= 0) {
butterfly.move()
}
stage.update();
}
рдПрдХ рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг 4 редрдмрд╣реБрдд рд╕реА рддрд┐рддрд▓рд┐рдпрд╛рдБ
рдЕрдм рдФрд░ рдЕрдзрд┐рдХ рддрд┐рддрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рд╡рд┐рдВрдЧ рдЗрдореЗрдЬ рдПрдбреНрд░реЗрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
var bfimgsrc = [{ left: "../images/Didius 1.png" , right: "../images/Didius 2.png" },
{ left: "../images/Amphitrion 1.png" , right: "../images/Amphitrion 2.png" },
{ left: "../images/Catenarius 1.png" , right: "../images/Catenarius 2.png" },
{ left: "../images/Cyanides 1.png" , right: "../images/Cyanides 2.png" },
{ left: "../images/Cypres 1.png" , right: "../images/Cypres 2.png" },
{ left: "../images/Diana 1.png" , right: "../images/Diana 2.png" },
{ left: "../images/Hecuba 1.png" , right: "../images/Hecuba 2.png" },
{ left: "../images/Peleides 1.png" , right: "../images/Peleides 2.png" },
{ left: "../images/Polyphemus 1.png" , right: "../images/Polyphemus 2.png" },
{ left: "../images/Sulkowski 1.png" , right: "../images/Sulkowski 2.png" }];
рд╣рдо рдПрдХ рдЕрд▓рдЧ рдлрдВрдХреНрд╢рди
рд▓реЛрдб рдореЗрдВ рддрд┐рддрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдПрдВрдЧреЗред рдмрдЯрд░рдлреНрд▓рд╛рдИрд╕ рдФрд░ рд╣рдо рдорд╛рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рддрд┐рддрд▓рд┐рдпреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ:
function init() {
// create a new stage and point it at our canvas:
canvas = document .getElementById( "canvas" );
stage = new Stage(canvas);
stage.enableMouseOver(10);
loadButterflyis(18);
canvas.onclick = function () {
loadButterflyis(5);
};
// subscribe to Ticker
Ticker.addListener(window);
}
function loadButterflyis(count) {
for ( var k = 0; k < count; k++) {
var i = Math.floor(bfimgsrc.length * Math.random());
var bfimages = {
left: new Image(),
right: new Image(),
loadedWings: 0,
onready: onButterflyImagesReady
};
// loading left wing
bfimages.left.src = bfimgsrc[i].left;
bfimages.left.onload = onWingImageLoaded;
bfimages.left.butterfly = bfimages;
// loading right wing
bfimages.right.src = bfimgsrc[i].right;
bfimages.right.onload = onWingImageLoaded;
bfimages.right.butterfly = bfimages;
}
}
рдЕрдкрдбреЗрдЯреЗрдб
рдЯрд┐рдХ :
// update scene on each tick
function tick() {
for ( var i = 0; i < bfs.length; i++) {
var butterfly = bfs[i];
if (butterfly.isActive()) {
butterfly.move();
}
else if (Math.random() > 0.999) {
butterfly.reset();
}
}
stage.update();
}
рдПрдХ рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг 5 редрд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡
рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рднрд╛рд╡ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рдереАрдореНрдб рдкреГрд╖реНрдарднреВрдорд┐:

рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдСрдбрд┐рдпреЛ:
< audio src ="audio/ArrivalForest.mp3" autoplay loop />
(рдореЛрдЧрд▓ рдЙрддреНрд╕рд╛рд╣реА рдЕрдиреНрдп рдСрдбрд┐рдпреЛ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред)
рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ редUpdред
рдореИрдВ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░реНрдХрд┐рдВрдЧ рдкрд░ рдФрд░ рдЕрд▓рдЧ рд╕реЗ
рд▓рдЧрд╛рддрд╛ рд╣реВрдВ : рдордзреНрдпрд╡рд░реНрддреА рдЙрджрд╛рд╣рд░рдг рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг -
narod.ru/disk/6923480001/March8.zip.htmlSource code was highlighted with Source Code Highlighter .