SlideShare une entreprise Scribd logo
1  sur  28
СОЗДАНИЕ HTML ИГР НА ЭЛЕМЕНТЕ
           CANVAS
ПРИЕМУЩЕСТВА HTML5 ПЕРЕД FLASH
•   Открытость платформы
•   Чистая веб-технология
•   Более высокие надѐжность, производительность и безопасность
•   Более низкое энергопотребление
•   Поддержка управления, с помощью сенсорных экранов




                                                                  2
ИСТОРИЯ HTML5




                3
ПОДДЕРЖКА БРАУЗЕРАМИ




                       4
ОБЪЯВЛЕНИЕ ЭЛЕМЕНТА <CANVAS>
•   Для объявления используется тег <canvas></canas>
<canvas>
           Your browser doesn’t support canvas element
</canvas>


canvas = document.getElementById('canvas');
if (canvas.getContext)
{ //Canvas поддерживается
}
else
{ //Canvas не поддерживается
}




                                                         5
СОЗДАНИЕ ПРИМИТИВОВ
•   beginPath()
•   moveTo(x, y)
•   lineTo(x, y)
•   stroke()
var canvas = document.getElementById(canvas);
var context = canvas.getContext(‘2d’);
context.beginPath();
context.moveTo(10, 20);
context.lineTo(20, 30);
context.stroke();




                                                6
РАБОТА С КРИВЫМИ
•   quadricCurveTo(cpx, cpy, x, y)
•   bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y)
•   arcTo(x1, y1, x2, y2, radius)




                                                  7
СТИЛИЗАЦИЯ ЛИНИЙ
•   lineWidth
•   lineJoin
•   strokeStyle




                   8
РАБОТА С ЦВЕТОМ
•   fillStyle
•   fillRect(x, y, width, height)
•   clearRect(x, y, width, height)




                                     9
РАБОТА С ГОТОВЫМ ИЗОБРАЖЕНИЕМ
•   drawImage(image, x, y, width, height)


var image = new Image();
image.src = ‘image.jpg’;
image.onload = function()
{
          drawImage(image, 5, 10, 100, 100);
}




                                               10
ГРАДИЕНТ
•   createLinearGradient(x0, x1, y0, y1)
•   addColorStop(gradientPart, color)
•   createRadialGradient(x0, y0, r0, x1, y1, r1);


var gradient = createLinearGradient(0, 0, 100, 1000);
gradient.addColorStop(0, rgb(255, 0, 0));
gradient.addColorStop(0.5. rgb(0, 255, 0));
gradient.addColorStop(1 rgb(0, 0, 255));
context.fillStyle = gradient;
context.fillRect = (0, 0, 100, 100);




                                                        11
ИЗОБРАЖЕНИЯ - ШАБЛОНЫ
•   createPattern(Image, repeat)
repeat
repeat-x
repeat-y
norepeat
var image = new Image();
image.src = ‘image.jpg’;
Image.onload = new function()
{
         context.strokeStyle = context.createPattern(image, ‘repeat’);




                                                                     12
ОСНОВНЫЕ ГРАФИЧЕСКИЕ
ПРЕОБРАЗОВАНИЯ
•   translate(x, y)
•   scale(x, y)
•   rotate(cornerRadian)
•   save()
•   restore()




                           13
РАБОТА С ТЕКСТОМ
•   textAlign
•   font
•   textBaseLine
•   strokeText(text, x, y, maxWidth)
•   fillText(text, x, y, maxWidth)


context.textAlign = ‘center’;
context.font = ‘Arial’;
context.strokeText(‚Hello world!‛, 0, 0, 300);




                                                 14
РАБОТА С ТЕНЬЮ
•   shadowColor
•   shadowOffsetX
•   shadowOffsetY
•   shadowBlur




                    15
РАБОТА С ПИКСЕЛЯМИ ИЗОБРАЖЕНИЯ
•   getImageData(x, y, width, height)
•   width
•   height
•   data
R = ((width * y) + x) * 4
G = (((width * y) + x) * 4) + 1
B = (((width * y) + x) * 4) + 2
Alpha = (((width * y) + x) * 4) + 3
•   putImageData(imageData, dx, dy)




                                        16
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
СОЗДАНИЕ ФОРМЫ
<!doctype html>
<head>
    <title>Snake</title>
    <script type="text/javascript" src="snake.js"></script>
</head>
<body onload="init()">
    <input type="button" value="Play/Pause" onclick="play()"><br />
    <canvas id="canvas" style="border: solid 1px red;" width="600"
height="600">

    </canvas>
</body>




                                                                  17
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
var   snakeColor = "rgb(0, 0, 0)";
var   bckColor = "rgb(255, 255, 255)";
var   foodColor = "rgb(0, 255, 0)";
var   ctx;
var   gridSize = 20;
var   snake;
var   food = [];
var   direction;
var   changex = [-1, 0, 1, 0];
var   changey = [0, -1, 0, 1];
var   paused;
var   speed = 100;
var   clock;




                                         18
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ОТРИСОВКА ЭЛЕМЕНТОВ
function drawSnake()
{
    ctx.fillStyle = snakeColor;
    ctx.fillRect(snake[snake.length - 1][0] * gridSize,
snake[snake.length - 1][1] * gridSize, gridSize, gridSize);
}
function drawFood()
{
    ctx.fillStyle = foodColor;
    ctx.fillRect(food[0] * gridSize, food[1] * gridSize, gridSize,
gridSize);
}

function delPart(x, y)
{
    ctx.fillStyle = bckColor;
    ctx.clearRect(x * gridSize, y * gridSize, gridSize, gridSize);
}




                                                                     19
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ПРОВЕРКА НА ПРИНАДЛЕЖНОСТЬ
ТОЧКИ ТЕЛУ ЗМЕЙКИ
function dotBelongSnake(x, y)
{
    res = false;
    for(i = 0; i < snake.length && !res; ++i)
    {
        res = x == snake[i][0] && y == snake[i][1];
    }
    return res;
}




                                                      20
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ
function setX(x)
{
    return x >= 0 ? x % (ctx.canvas.width / gridSize) : x +
(ctx.canvas.width / gridSize);
}

function setY(y)
{
    return y >= 0 ? y % (ctx.canvas.height / gridSize) : y +
(ctx.canvas.height / gridSize);
}

function addFood()
{
    do{
        food[0] = Math.floor(Math.random() * (ctx.canvas.height /
gridSize));
        food[1] = Math.floor(Math.random() * (ctx.canvas.height /
gridSize));
    }while(dotBelongSnake(food[0], food[1]));
    drawFood();
}                                                                   21
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ПРОВЕРКА НА СТОЛКНОВЕНИЕ
function crash()
{
    res = false;
    for(i = 0; i < snake.length - 1 && !res; ++i)
    {
        res = snake[i][0] == snake[snake.length - 1][0] &&
snake[i][1] == snake[snake.length - 1][1];
    }
    return res;
}




                                                             22
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
УПРАВЛЕНИЕ СОСТОЯНИЕМ ИГРЫ
function play()
{
    if(paused)
    {
         clock = setInterval(movement, speed);
    }
    else
    {
         clearInterval(clock);
    }
    paused = !paused;
}




                                                 23
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ОСНОВНОЙ ИГРОВОЙ ЦИКЛ
function movement()
{
    snake.push([setX(snake[snake.length - 1][0] + changex[direction]),
setY(snake[snake.length - 1][1] + changey[direction])])
    if(!dotBelongSnake(food[0], food[1]))
    {
         delPart(snake[0][0], snake[0][1]);
         snake.shift();
    }
    else
    {
         addFood();
    }
    if(crash())
    {
         play();
         alert("Game Over;");
         clear();
         init();
    }
    drawSnake();
}                                                                      24
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
УПРАВЛЕНИЕ
function changeDirection(event)
{
    if(!paused)
    {
        code = 0
        if(event == null)
        {
             code = window.event.keyCode;
        }
        else
        {
             code = event.keyCode;
        }
        switch(code)
        {
        case 37:
             if(direction != 2)
             {
                 direction = 0;
             }
             break;
        case 38:
             if(direction != 3)
             {
                 direction = 1;
             }
             break;                         25
        case 39:
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ИНИЦИАЛИЗАЦИЯ
function init()
{
    canvas = document.getElementById('canvas');
    if (canvas.getContext)
    {
         snake = [[0, 0]];
         direction = 2;
         paused = true;
         ctx = canvas.getContext('2d');
         document.onkeydown = function (event)
         {
             changeDirection(event);
         };
         addFood();
         return true;
    }
    else
    {
         alert(‚Canvas isn’t supported!");
         return false;
    }
}




                                                  26
СОЗДАНИЕ ИГРЫ «ЗМЕЙКА».
ГОТОВАЯ ИГРА




                          27
СПИСОК ИСТОЧНИКОВ
•   http://evolutionofweb.appspot.com
•   http://caniuse.com
•   http://www.apple.com/hotnews/thoughts-on-flash/
•   Лабберс П., Олберс Б., Салим Ф. HTML5 для профессионалов




                                                               28

Contenu connexe

Tendances

Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingTatiana Volkova
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
Что API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновЧто API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновYandex
 
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыКомпьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыTatiana Volkova
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиTatiana Volkova
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Yandex
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияTatiana Volkova
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Tatiana Volkova
 
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Yandex
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)Anton Bukov
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perlmayperl
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyEvgeny Kompaniyets
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeDA-14
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7Eugene Fidelin
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 

Tendances (20)

Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в Processing
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"
 
Что API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновЧто API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон Корзунов
 
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыКомпьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
 
Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.Компьютерная графика в Processing, часть 6. Взаимодействие.
Компьютерная графика в Processing, часть 6. Взаимодействие.
 
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
 
Javascript
JavascriptJavascript
Javascript
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Squeek School #3
Squeek School #3Squeek School #3
Squeek School #3
 
Быть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря GroovyБыть в 10 раз эффективнее благодаря Groovy
Быть в 10 раз эффективнее благодаря Groovy
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real life
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 

Similaire à создание HTML игр на элементе canvas

I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18OdessaFrontend
 
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Ontico
 
Создание игр с помощью Cocos2D (Станислав Краснояров)
Создание игр с помощью Cocos2D (Станислав Краснояров)Создание игр с помощью Cocos2D (Станислав Краснояров)
Создание игр с помощью Cocos2D (Станислав Краснояров)2Niversity
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловGeeksLab Odessa
 
Кроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети ЯндексаКроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети ЯндексаMedia Gorod
 
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"IT Event
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокAndrey Karpov
 
Марина Степанова "Много объектов на карте"
Марина Степанова "Много объектов на карте"Марина Степанова "Много объектов на карте"
Марина Степанова "Много объектов на карте"Yandex
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)Alex Filatov
 
C# Desktop. Занятие 11.
C# Desktop. Занятие 11.C# Desktop. Занятие 11.
C# Desktop. Занятие 11.Igor Shkulipa
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Yandex
 
JavaFX Script Language
JavaFX Script LanguageJavaFX Script Language
JavaFX Script LanguageSSA KPI
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptConstantin Kichinsky
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
Вёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, Jammit
Вёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, JammitВёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, Jammit
Вёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, JammitAndrey Sitnik
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 
Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"Yandex
 

Similaire à создание HTML игр на элементе canvas (20)

I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
 
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
Интерактивные 3D-карты своими руками / Александр Амосов (Avito)
 
Создание игр с помощью Cocos2D (Станислав Краснояров)
Создание игр с помощью Cocos2D (Станислав Краснояров)Создание игр с помощью Cocos2D (Станислав Краснояров)
Создание игр с помощью Cocos2D (Станислав Краснояров)
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Кроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети ЯндексаКроссбраузерные решения в рекламной сети Яндекса
Кроссбраузерные решения в рекламной сети Яндекса
 
Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"Dmitry Bartalevich - "How to train your WebVR"
Dmitry Bartalevich - "How to train your WebVR"
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Марина Степанова "Много объектов на карте"
Марина Степанова "Много объектов на карте"Марина Степанова "Много объектов на карте"
Марина Степанова "Много объектов на карте"
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)
 
C# Desktop. Занятие 11.
C# Desktop. Занятие 11.C# Desktop. Занятие 11.
C# Desktop. Занятие 11.
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
 
JavaFX Script Language
JavaFX Script LanguageJavaFX Script Language
JavaFX Script Language
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScript
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Вёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, Jammit
Вёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, JammitВёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, Jammit
Вёрстка в стиле Ruby: HAML, SASS, Compass, CoffeeScript, Jammit
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"Фёдор Голубев "API Яндекс.Карт"
Фёдор Голубев "API Яндекс.Карт"
 

создание HTML игр на элементе canvas

  • 1. СОЗДАНИЕ HTML ИГР НА ЭЛЕМЕНТЕ CANVAS
  • 2. ПРИЕМУЩЕСТВА HTML5 ПЕРЕД FLASH • Открытость платформы • Чистая веб-технология • Более высокие надѐжность, производительность и безопасность • Более низкое энергопотребление • Поддержка управления, с помощью сенсорных экранов 2
  • 5. ОБЪЯВЛЕНИЕ ЭЛЕМЕНТА <CANVAS> • Для объявления используется тег <canvas></canas> <canvas> Your browser doesn’t support canvas element </canvas> canvas = document.getElementById('canvas'); if (canvas.getContext) { //Canvas поддерживается } else { //Canvas не поддерживается } 5
  • 6. СОЗДАНИЕ ПРИМИТИВОВ • beginPath() • moveTo(x, y) • lineTo(x, y) • stroke() var canvas = document.getElementById(canvas); var context = canvas.getContext(‘2d’); context.beginPath(); context.moveTo(10, 20); context.lineTo(20, 30); context.stroke(); 6
  • 7. РАБОТА С КРИВЫМИ • quadricCurveTo(cpx, cpy, x, y) • bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x, y) • arcTo(x1, y1, x2, y2, radius) 7
  • 8. СТИЛИЗАЦИЯ ЛИНИЙ • lineWidth • lineJoin • strokeStyle 8
  • 9. РАБОТА С ЦВЕТОМ • fillStyle • fillRect(x, y, width, height) • clearRect(x, y, width, height) 9
  • 10. РАБОТА С ГОТОВЫМ ИЗОБРАЖЕНИЕМ • drawImage(image, x, y, width, height) var image = new Image(); image.src = ‘image.jpg’; image.onload = function() { drawImage(image, 5, 10, 100, 100); } 10
  • 11. ГРАДИЕНТ • createLinearGradient(x0, x1, y0, y1) • addColorStop(gradientPart, color) • createRadialGradient(x0, y0, r0, x1, y1, r1); var gradient = createLinearGradient(0, 0, 100, 1000); gradient.addColorStop(0, rgb(255, 0, 0)); gradient.addColorStop(0.5. rgb(0, 255, 0)); gradient.addColorStop(1 rgb(0, 0, 255)); context.fillStyle = gradient; context.fillRect = (0, 0, 100, 100); 11
  • 12. ИЗОБРАЖЕНИЯ - ШАБЛОНЫ • createPattern(Image, repeat) repeat repeat-x repeat-y norepeat var image = new Image(); image.src = ‘image.jpg’; Image.onload = new function() { context.strokeStyle = context.createPattern(image, ‘repeat’); 12
  • 13. ОСНОВНЫЕ ГРАФИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ • translate(x, y) • scale(x, y) • rotate(cornerRadian) • save() • restore() 13
  • 14. РАБОТА С ТЕКСТОМ • textAlign • font • textBaseLine • strokeText(text, x, y, maxWidth) • fillText(text, x, y, maxWidth) context.textAlign = ‘center’; context.font = ‘Arial’; context.strokeText(‚Hello world!‛, 0, 0, 300); 14
  • 15. РАБОТА С ТЕНЬЮ • shadowColor • shadowOffsetX • shadowOffsetY • shadowBlur 15
  • 16. РАБОТА С ПИКСЕЛЯМИ ИЗОБРАЖЕНИЯ • getImageData(x, y, width, height) • width • height • data R = ((width * y) + x) * 4 G = (((width * y) + x) * 4) + 1 B = (((width * y) + x) * 4) + 2 Alpha = (((width * y) + x) * 4) + 3 • putImageData(imageData, dx, dy) 16
  • 17. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». СОЗДАНИЕ ФОРМЫ <!doctype html> <head> <title>Snake</title> <script type="text/javascript" src="snake.js"></script> </head> <body onload="init()"> <input type="button" value="Play/Pause" onclick="play()"><br /> <canvas id="canvas" style="border: solid 1px red;" width="600" height="600"> </canvas> </body> 17
  • 18. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ var snakeColor = "rgb(0, 0, 0)"; var bckColor = "rgb(255, 255, 255)"; var foodColor = "rgb(0, 255, 0)"; var ctx; var gridSize = 20; var snake; var food = []; var direction; var changex = [-1, 0, 1, 0]; var changey = [0, -1, 0, 1]; var paused; var speed = 100; var clock; 18
  • 19. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ОТРИСОВКА ЭЛЕМЕНТОВ function drawSnake() { ctx.fillStyle = snakeColor; ctx.fillRect(snake[snake.length - 1][0] * gridSize, snake[snake.length - 1][1] * gridSize, gridSize, gridSize); } function drawFood() { ctx.fillStyle = foodColor; ctx.fillRect(food[0] * gridSize, food[1] * gridSize, gridSize, gridSize); } function delPart(x, y) { ctx.fillStyle = bckColor; ctx.clearRect(x * gridSize, y * gridSize, gridSize, gridSize); } 19
  • 20. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ПРОВЕРКА НА ПРИНАДЛЕЖНОСТЬ ТОЧКИ ТЕЛУ ЗМЕЙКИ function dotBelongSnake(x, y) { res = false; for(i = 0; i < snake.length && !res; ++i) { res = x == snake[i][0] && y == snake[i][1]; } return res; } 20
  • 21. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ function setX(x) { return x >= 0 ? x % (ctx.canvas.width / gridSize) : x + (ctx.canvas.width / gridSize); } function setY(y) { return y >= 0 ? y % (ctx.canvas.height / gridSize) : y + (ctx.canvas.height / gridSize); } function addFood() { do{ food[0] = Math.floor(Math.random() * (ctx.canvas.height / gridSize)); food[1] = Math.floor(Math.random() * (ctx.canvas.height / gridSize)); }while(dotBelongSnake(food[0], food[1])); drawFood(); } 21
  • 22. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ПРОВЕРКА НА СТОЛКНОВЕНИЕ function crash() { res = false; for(i = 0; i < snake.length - 1 && !res; ++i) { res = snake[i][0] == snake[snake.length - 1][0] && snake[i][1] == snake[snake.length - 1][1]; } return res; } 22
  • 23. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». УПРАВЛЕНИЕ СОСТОЯНИЕМ ИГРЫ function play() { if(paused) { clock = setInterval(movement, speed); } else { clearInterval(clock); } paused = !paused; } 23
  • 24. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ОСНОВНОЙ ИГРОВОЙ ЦИКЛ function movement() { snake.push([setX(snake[snake.length - 1][0] + changex[direction]), setY(snake[snake.length - 1][1] + changey[direction])]) if(!dotBelongSnake(food[0], food[1])) { delPart(snake[0][0], snake[0][1]); snake.shift(); } else { addFood(); } if(crash()) { play(); alert("Game Over;"); clear(); init(); } drawSnake(); } 24
  • 25. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». УПРАВЛЕНИЕ function changeDirection(event) { if(!paused) { code = 0 if(event == null) { code = window.event.keyCode; } else { code = event.keyCode; } switch(code) { case 37: if(direction != 2) { direction = 0; } break; case 38: if(direction != 3) { direction = 1; } break; 25 case 39:
  • 26. СОЗДАНИЕ ИГРЫ «ЗМЕЙКА». ИНИЦИАЛИЗАЦИЯ function init() { canvas = document.getElementById('canvas'); if (canvas.getContext) { snake = [[0, 0]]; direction = 2; paused = true; ctx = canvas.getContext('2d'); document.onkeydown = function (event) { changeDirection(event); }; addFood(); return true; } else { alert(‚Canvas isn’t supported!"); return false; } } 26
  • 28. СПИСОК ИСТОЧНИКОВ • http://evolutionofweb.appspot.com • http://caniuse.com • http://www.apple.com/hotnews/thoughts-on-flash/ • Лабберс П., Олберс Б., Салим Ф. HTML5 для профессионалов 28