Простая анимация на сайте - Create JS


Довольно давно уже закончил работу над интересным проектом, связанным с анимацией в браузере - только дошли руки набросать статью с примером. В процессе работы была задействована библиотека Create JS – в этой статье я расскажу вам, как начать работать с ней.

Пример того, что получится, можете посмотреть тут:



Управление клавиши «влево-вправо» (A или D), прыжок – пробел или W.

Посмотрели? Теперь начинаем это делать. Подключается библиотека до смешного просто – никакой установки – как обычный файл скрипта js.

<script src='js/createjs.min.js'></script>
Дальше создаем поле для рисования. Например, вот так:

<div id="canvaswrap"><canvas id="Canvas" ></canvas>Тут, кстати, можно добавлять свои элементы. Только не забыть про z-index и позиционирование.</div>
Надо поговорить о том, что вообще у нас будет, какая анимация. Мы сделаем двигающегося в разные стороны человечка из игры Contra для денди. Всего будет пять кадров, вот таких:



В принципе, можно даже такой рисунок уже использовать в нашей анимации JS, но лично я предпочитаю отдельные изображения – так проще менять порядок, заливать их и тд. То есть из этого изображения сделаем пять с одинаковыми размерами и назовем их k1.png – k5.png.

Далее уже начинаем писать на JS. Настройки:

var canvas = document.getElementById("Canvas");
stage = new createjs.Stage(canvas)var stageHeight = 350;
var stageWidth = 600;
var blockHeight = 70;
var characterHeight = 42;
var characterWidth = 25;
var KEYCODE_SPACE = 32;
var KEYCODE_LEFT = 37;
var KEYCODE_RIGHT = 39;
var jumpSpeed = 1000;
var xVel = 5;
var yVel = 0;
var gravity = 1.2;
var isJumping = false;
var moveLeft = false;
var moveRight = false;
var characterGround = 140;
var character;
var spriteSheet;
var ground;
var characterMoving = true;
По названиям должно быть понятно, что за что отвечает, не будем тут останавливаться подробно. Размеры поля, размеры картинки и первоначальное позиционирование. Дальше загружаем изображения:

function setup() {
var characterImage1 = new Image();
characterImage1.src = "img/k1.png";
var characterImage2 = new Image();
characterImage2.src = "img/k2.png";
var characterImage3 = new Image();
characterImage3.src = "img/k3.png";
var characterImage4 = new Image();
characterImage4.src = "img/k4.png";
var characterImage5 = new Image();
characterImage5.src = "img/k5.png";
spritesheet = new createjs.SpriteSheet({"images": [characterImage1,characterImage2,characterImage3,characterImage4,characterImage5],
"frames": {"height": 42, "count": 5, "width": 25},
"animations": { run: [0,5]}		});
character = new createjs.Sprite(spritesheet);
character.framerate = 5;
character.x = (stageWidth / 2) - characterWidth;
character.y = characterGround;
stage.addChild(character);
createjs.Ticker.addEventListener("tick", tick);
document.onkeydown = handleKeyDown;
document.onkeyup = handleKeyUp;}
Теперь обработчики клавиш:

function handleKeyDown(e) {
switch (e.keyCode) {
case KEYCODE_SPACE:        case 87:  // W
jump();
break;
case KEYCODE_LEFT:        case 65:  // A
moveLeft = true;
character.play();
break;
case KEYCODE_RIGHT:        case 68:  // D
moveRight = true;
character.play();
break;    } }
function handleKeyUp(e) {
switch (e.keyCode) {
case KEYCODE_LEFT:        case 65:  // A
moveLeft = false;
character.gotoAndStop(0);
break; 
case KEYCODE_RIGHT:        case 68:  // D
moveRight = false;
character.gotoAndStop(0);
break;
}}function jump() {    if (isJumping == false) { 
	yVel = -15; 
	isJumping = true;    }}
В этих обработчиках мы просто ставим флаги, а непосредственно управление движением идет здесь:

function tick(event) {
if (moveLeft) {
character.x -= xVel;
if (character.scaleX > 0) {
character.scaleX *= -1;
character.x += characterWidth;
} 
} else if (moveRight) {  
character.x += xVel;
if (character.scaleX < 0) {
character.scaleX *= -1;
character.x -= characterWidth;
}        }
if (isJumping) {
yVel += gravity;
character.y += yVel;
    if (character.y > characterGround) {
	character.y = characterGround;
yVel = 0;
isJumping = false;
}
        }
		stage.update();}
		
Вот так просто можно создать анимацию с помощью Create JS (Erase JS). Она подходит как для простых проектов, так и для более сложных, предназначенных не для обучения, а для реального показа на сайте.

Однако, стоит помнить, что библиотека не сделает за вас всю работу – она лишь предоставляет инструменты для анимации, а многому придётся научиться самому. К примеру, в нашем примере движется человечек – а на самом деле он должен оставаться неподвижным – должна лишь происходить анимация; движение будет происходить только тогда, когда заканчивается фон. Также надо учесть масштабирование и изменение размеров экрана - об этом и многом другом поговорим в следующих статьях.

Если вам необходимо помочь с любой работой, предполагающей анимацию на JS, вы можете написать мне. У меня есть опыт с помощью в дипломных работах, а также на реальных сайтах.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, javascript, анимация, Create JS




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



Разбор ошибок валидации сайта
Урок 37. Область видимости JavaScript: введение и блоки
Верстка с помощью jQuery