ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΡΠ°ΠΉΡΡ ΡΡΡΡ ΡΠΈΡΠ΅ ΡΠΈΡΠΈΠ½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ³ΡΠΎΠΊΠ° β 24 ΠΏΠΈΠΊΡΠ΅Π»Ρ Π²ΠΌΠ΅ΡΡΠΎ 16, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΡΡΠΊ ΠΈ Π½ΠΎΠ³, ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄ΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ x ΠΈ ΡΠΈΡΠΈΠ½Ρ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ (playerXOverlap).
var playerSprites = document.createElement("img");
playerSprites.src = "img/player.png";
var playerXOverlap = 4;
CanvasDisplay.prototype.drawPlayer = function(x, y, width,
height) {
var sprite = 8, player = this.level.player;
width += playerXOverlap * 2;
x -= playerXOverlap;
if (player.speed.x != 0)
this.flipPlayer = player.speed.x < 0;
if (player.speed.y != 0)
sprite = 9;
else if (player.speed.x != 0)
sprite = Math.floor(this.animationTime * 12) % 8;
this.cx.save();
if (this.flipPlayer)
flipHorizontally(this.cx, x + width / 2);
this.cx.drawImage(playerSprites,
sprite * width, 0, width, height,
x, y, width, height);
this.cx.restore();
};
ΠΠ΅ΡΠΎΠ΄ drawPlayer Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· drawActors, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅Ρ Π°ΠΊΡΡΡΠΎΠ² Π² ΠΈΠ³ΡΠ΅.
CanvasDisplay.prototype.drawActors = function() {
this.level.actors.forEach(function(actor) {
var width = actor.size.x * scale;
var height = actor.size.y * scale;
var x = (actor.pos.x - this.viewport.left) * scale;
var y = (actor.pos.y - this.viewport.top) * scale;
if (actor.type == "player") {
this.drawPlayer(x, y, width, height);
} else {
var tileX = (actor.type == "coin" ? 2 : 1) * scale;
this.cx.drawImage(otherSprites,
tileX, 0, width, height,
x, y, width, height);
}
}, this);
};
ΠΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΡΠΎΠΌΠ΅ ΠΈΠ³ΡΠΎΠΊΠ° ΠΌΡ ΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π΅Π³ΠΎ ΡΠΈΠΏ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°ΠΉΡΠ°. ΠΠ°Π²Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ 20, ΠΌΠΎΠ½Π΅ΡΠ° β 40.
ΠΡΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ°ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π°ΠΊΡΡΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠ° (0, 0) Π½Π°ΡΠ΅Π³ΠΎ Ρ ΠΎΠ»ΡΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠΎΡΠΊΠ΅ ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, Π° Π½Π΅ Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠΎΡΠΊΠ΅ ΡΡΠΎΠ²Π½Ρ. ΠΡΡ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ translate.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ display Π² runGame:
<body>
<script>
runGame(GAME_LEVELS, CanvasDisplay);
</script>
</body>
ΠΡΠ±ΠΎΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
ΠΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π³ΡΠ°ΡΠΈΠΊΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΠ±ΠΎΡ β HTML, SVG ΠΈ Ρ ΠΎΠ»ΡΡ. ΠΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΡΡΠ°ΡΠΈΠΉ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΅ΡΡΡ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ.
Π§ΠΈΡΡΡΠΉ HTML ΠΏΡΠΎΡΡ. ΠΠ½ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ. SVG ΠΈ Ρ ΠΎΠ»ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π² Π΅Π³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. Π HTML ΠΏΡΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π±Π»ΠΎΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°.
SVG ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠΊΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Ρ ΠΎΡΠΎΡΠΎ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ. ΠΠ½ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ HTML, Π½ΠΎ ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠΎΡΠ½Π΅Π΅.
SVG ΠΈ HTML ΡΡΡΠΎΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ (DOM), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅Π½ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΠΎΡΠ²Π΅Ρ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, Π½Π° Ρ ΠΎΠ»ΡΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ΅Π½Ρ Π·Π°ΡΡΠ°ΡΠ½ΠΎ. DOM ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΡΡΠΈ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ (Π΄Π°ΠΆΠ΅ Π½Π° ΡΠΎΡΠΌΠ°Ρ , Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· SVG). Π‘ Ρ ΠΎΠ»ΡΡΠΎΠΌ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠΉΠ΄ΡΡ.
ΠΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΠΎΠ»ΡΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½ Π½Π΅ ΡΡΡΠΎΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , Π° ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΡΠ΅Ρ Π½Π° ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ, ΡΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π·Π°ΡΡΠ°ΡΠ½ΠΎΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΡΡΡΡΠ΅ Π½Π° ΡΠΎΡΠΌΡ.
ΠΡΡΡ Π΅ΡΡ ΡΠ°ΠΊΡΠΎΡΡ, ΡΠΈΠΏΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ΅Π½Ρ ΠΏΠΎΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π»ΡΡΠ΅ΠΉ) ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² JavaScript (ΡΠ°Π·ΠΌΡΡΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ°ΠΆΠ΅Π½ΠΈΠ΅), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠΎΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΡΠ°Ρ ΡΠ΅ΡΠ΅Π· SVG ΠΈΠ»ΠΈ Ρ ΠΎΠ»ΡΡ, Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ HTML ΠΏΠΎΠ²Π΅ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ.
ΠΠ»Ρ Π½Π΅ΠΏΡΠΈΠ²Π΅ΡΠ΅Π΄Π»ΠΈΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΈΡΠΏΠ»Π΅ΠΉ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π»ΡΠ±ΡΠΌ ΠΈΠ· ΡΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΡΡ ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΌΡΡΠΈ, ΠΈ Π½Π΅ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠΎΠ³
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°Π²ΡΠΈΡΡ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ <canvas>.
Π£Π·Π΅Π» Ρ ΠΎΠ»ΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, Π³Π΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ΅ΠΊΡ context, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ getContext. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΈ ΠΎΠ±Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΡΠΌΡ. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ fillStyle Π·Π°Π΄Π°ΡΡ Π·Π°Π»ΠΈΠ²ΠΊΡ ΡΠΎΡΠΌ. Π‘Π²ΠΎΠΉΡΡΠ²Π° strokeStyle ΠΈ lineWidth ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΈΡΡΡΡΡΡ Π»ΠΈΠ½ΠΈΠΈ.
ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΈ ΠΊΡΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΅ΡΠΎΠ΄Ρ fillRect ΠΈ strokeRect ΡΠΈΡΡΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ, Π° fillText ΠΈ strokeText Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠ΅ΠΊΡΡ. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΡΠΎΡΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠΎΠΈΡΡ ΠΏΡΡΠΈ.
ΠΡΠ·ΠΎΠ² beginPath Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΡΡΡ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π»ΠΈΠ½ΠΈΠΈ ΠΈ ΠΊΡΠΈΠ²ΡΠ΅ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΏΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, lineTo Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΡΡΠΌΡΡ. ΠΠΎΠ³Π΄Π° ΠΏΡΡΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ fill ΠΈΠ»ΠΈ ΠΎΠ±Π²Π΅ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ stroke.
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Ρ ΠΎΠ»ΡΡΠ° Π½Π° Π½Π°Ρ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ drawImage. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΎΠ½ ΡΠΈΡΡΠ΅Ρ Π²ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ, Π½ΠΎ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΠΏΠΈΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΠ·Ρ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ° ΠΈΠ· ΡΠ°ΡΡΠ΅ΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°Π²ΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·.
ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΡ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ. ΠΠ²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Ρ ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ translate, scale ΠΈ rotate. ΠΡΠΎ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ save ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ restore.
ΠΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΉ Π½Π° Ρ ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ clearRect Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ ΡΠ°ΡΡΠ΅ΠΉ Ρ ΠΎΠ»ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
Π€ΠΎΡΠΌΡ
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΈΡΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠ³ΡΡΡ:
1 ΡΡΠ°ΠΏΠ΅ΡΠΈΡ
2 ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠΎΠΌΠ±
3 Π·ΠΈΠ³Π·Π°Π³
4 ΡΠΏΠΈΡΠ°Π»Ρ ΠΈΠ· 100 ΠΎΡΡΠ΅Π·ΠΊΠΎΠ²
5 ΠΆΡΠ»ΡΡΡ Π·Π²Π΅Π·Π΄Ρ
Π ΠΈΡΡΡ Π΄Π²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ , ΠΊΠΎΠ½ΡΡΠ»ΡΡΠΈΡΡΠΉΡΠ΅ΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Math.cos ΠΈ Math.sin ΠΈΠ· Π³Π»Π°Π²Ρ 13, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π½Π° ΠΊΡΡΠ³Π΅ Ρ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΌΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠΈΠΏΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΡΠ΅ΠΊ. ΠΠ°ΡΠΈΠ°Π½Ρ ΡΠΎ Π²ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ Π½ΡΠΆΠ½ΡΡ ΡΠΈΡΠ΅Π» ΠΏΡΡΠΌΠΎ Π² ΠΊΠΎΠ΄ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ΄Π½Π΅Π΅ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ.
<canvas width="600" height="200"></canvas>
<script>
var cx = document.querySelector("canvas").getContext("2d");
// ΠΠ°Ρ ΠΊΠΎΠ΄
</script>
ΠΡΡΠ³ΠΎΠ²Π°Ρ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ°
Π Π°Π½Π΅Π΅ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΡΠ³ΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΠΌΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΡΡΠΊΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΎΡΡΡΠΊΠ°ΡΡ ΡΠΈΠΌΠΏΠ°ΡΠΈΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±Ρ ΡΠ°Π±ΠΎΡΠ°Π» ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ Π½Π°Π±ΠΎΡΠ°Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π½Π΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΌΠ΅Π½ΡΡΠ΅ 5% (ΡΡΠΎΠ±Ρ ΡΠ΅ΠΊΡΡ Π½Π΅ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΈΠ»ΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π°).
ΠΠ°ΠΌ ΡΠ½ΠΎΠ²Π° ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Math.sin ΠΈ Math.cos.
<canvas width="600" height="300"></canvas>
<script>
var cx = document.querySelector("canvas").getContext("2d");
var total = results.reduce(function(sum, choice) {
return sum + choice.count;
}, 0);
var currentAngle = -0.5 * Math.PI;
var centerX = 300, centerY = 150;
// ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠ΅ΡΠΎΠΊ
results.forEach(function(result) {
var sliceAngle = (result.count / total) * 2 * Math.PI;
cx.beginPath();
cx.arc(centerX, centerY, 100,
currentAngle, currentAngle + sliceAngle);
currentAngle += sliceAngle;
cx.lineTo(centerX, centerY);
cx.fillStyle = result.color;
cx.fill();
});
</script>
ΠΡΡΠ³Π°ΡΡΠΈΠΉ ΠΌΡΡΠΈΠΊ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΡ requestAnimationFrame ΠΈΠ· Π³Π»Π°Π² 13 ΠΈ 15 Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Ρ ΠΏΡΡΠ³Π°ΡΡΠΈΠΌ Π²Π½ΡΡΡΠΈ ΠΌΡΡΠΎΠΌ. ΠΡΡ Π΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΈ ΠΎΡΡΠΊΠ°ΠΊΠΈΠ²Π°Π΅Ρ ΠΎΡ ΡΡΠΎΡΠΎΠ½ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΏΡΠΈ ΡΠΎΡΠ΄Π°ΡΠ΅Π½ΠΈΠΈ.
<canvas width="400" height="400"></canvas>
<script>
var cx = document.querySelector("canvas").getContext("2d");
var lastTime = null;
function frame(time) {
if (lastTime != null)
updateAnimation(Math.min(100, time - lastTime) / 1000);
lastTime = time;
requestAnimationFrame(frame);