HTML5 рдФрд░ рдИрдЬреАрд▓рдЬреЗрдПрд╕ рдкрд░ 8 рдорд╛рд░реНрдЪ рдХреЗ рд▓рд┐рдП рдЧреНрд░реАрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдб рдмрдирд╛рдирд╛



(рддрд╕реНрд╡реАрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдмрдзрд╛рдИ рд╣реИ)

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

рдорд╛рдирдХ рд╕реАрдПрд╕рдПрд╕ рдЯреВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкреЛрд╕реНрдЯрдХрд╛рд░реНрдб рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЪрдЯреАрдПрдордПрд▓ 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.html

Source code was highlighted with Source Code Highlighter .

Source: https://habr.com/ru/post/In115030/


All Articles