<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9039896399603088005</id><updated>2024-09-27T15:02:26.103-07:00</updated><category term="HTML HTML5 CSS JS JavaScript Game StH"/><category term="HTML5 JavaScript CSS3 JS game"/><title type='text'>WebInMyLife</title><subtitle type='html'>Привет всем! Меня зовут Андрей Семенов, я инженер АСОиУ. Руковожу собственной фирмой, увлекаюсь написанием сайтов под ключ.&lt;br&gt;Наш сайт &lt;a href=&quot;http://sysadmin-vlg.ru&quot;&gt;sysadmin-vlg.ru&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-1978179092680324577</id><published>2013-12-14T09:36:00.001-08:00</published><updated>2013-12-14T09:40:44.281-08:00</updated><title type='text'>Генератор социального виджета.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://www.login.su/generator&quot;&gt;Генератор социального виджета.&lt;/a&gt;&amp;nbsp;Разрабатываю сейчас.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/1978179092680324577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2013/12/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/1978179092680324577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/1978179092680324577'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2013/12/blog-post.html' title='Генератор социального виджета.'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-8165670091433425878</id><published>2011-11-03T22:04:00.000-07:00</published><updated>2011-11-03T22:11:06.697-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTML HTML5 CSS JS JavaScript Game StH"/><title type='text'>Простая игра на HTML5 Canvas – часть 4</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt;Часть 4а.&amp;nbsp;РИСУЕМ ПЛАТФОРМЫ&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Есть два типа платформ. Наш персонаж может прыгать по обычной (оранжевой) и зеленой (батут), который дает дополнительное ускорение и гипер-ультра-высокий прыжок.&amp;nbsp;Всегда есть семь платформ на экране (я попробовал другое количество, от 4 до 10 и только 7 прекрасно работает с размером экрана заявленным в начале).&amp;nbsp;Давайте создадим&amp;nbsp;класс платформ (функции платформы будут наследовать).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;var Platform = function(x, y, type){&lt;br /&gt;
//функция принимает позицию и тип платформы&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;var that=this;&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;that.firstColor = &#39;#FF8C00&#39;;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;that.secondColor = &#39;#EEEE00&#39;;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;that.onCollide = function(){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;player.fallStop();&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;};&lt;/span&gt;//если тип платформы отличен от 1, то просто устанавливаем нужный цвет и вызываем функцию&lt;br /&gt;
//&lt;span lang=&quot;EN-US&quot;&gt;fallStop&lt;/span&gt;() определенную в прошлой части урока&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;if (type === 1) {&lt;/span&gt;//, но если тип равен &#39;1&#39;, устанавливаем другие цвета и ускорение взлета &lt;span lang=&quot;EN-US&quot;&gt;jumpSpeed&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; &lt;/span&gt;равным 50.&lt;br /&gt;
//после этого метод &lt;span lang=&quot;EN-US&quot;&gt;checkJump&lt;/span&gt;()примет &#39;50&#39; вместо &#39;17&#39; предусмотренных по умолчанию.&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;that.firstColor = &#39;#AADD00&#39;;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;that.secondColor = &#39;#698B22&#39;;&lt;/span&gt;that.onCollide = function(){&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;player.fallStop();&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;player.jumpSpeed = 50;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;};&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;that.x = ~~x;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;that.y = y;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;that.type = type;&lt;/span&gt;&lt;br /&gt;
return that;&lt;br /&gt;
};&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Теперь необходимо создать функцию, которая будет генерировать все платформы и складывать их в &lt;span lang=&quot;EN-US&quot;&gt;platforms&lt;/span&gt;[] массив, который мы определим в ближайшее время. После этого нарисуем платформы на экране.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;var nrOfPlatforms = 7,&lt;br /&gt;
&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;platforms = [],&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;platformWidth = 70,&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;platformHeight = 20;&lt;/span&gt;//глобальные (пока) переменные не очень подходят для хранения размеров платформ, но&lt;br /&gt;
//в нашем случае они необходимы для вычисления столкновений, поэтому размещены здесь&lt;br /&gt;
//а не в свойствах класса платформ&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;var generatePlatforms = function(){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;var position = 0, type;&lt;/span&gt;//&#39;&lt;span lang=&quot;EN-US&quot;&gt;position&lt;/span&gt;&#39; это &lt;span lang=&quot;EN-US&quot;&gt;Y&lt;/span&gt; координата платформы на экране и вначале она равно нулю&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;for (var i = 0; i &amp;lt; nrOfPlatforms; i++) {&lt;/span&gt;type = ~~(Math.random()*5);&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;if (type == 0) type = 1;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;else type = 0;&lt;/span&gt;//Обычных платформ будет примерно в пять раз больше, чем батутов&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;platforms[i] = new Platform(Math.random()*(width-platformWidth),position,type);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;//&lt;/span&gt;случайно выбранная позиция по &lt;span lang=&quot;EN-US&quot;&gt;X&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;if (position &amp;lt; height - platformHeight)&lt;br /&gt;
&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;position += ~~(height / nrOfPlatforms);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;}&lt;/span&gt;//и &lt;span lang=&quot;EN-US&quot;&gt;Y&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; &lt;/span&gt;интервал&lt;br /&gt;
}();&lt;br /&gt;
//эта функция будет вызвана только один раз, перед стартом игры&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Добавляем&amp;nbsp;метод Draw () объекту&amp;nbsp;платформы:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;var Platform = function(x, y, type){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;(...)&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;that.draw = function(){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;ctx.fillStyle = &#39;rgba(255, 255, 255, 1)&#39;;&lt;/span&gt;//Это важно заменить прозрачность в &lt;span lang=&quot;EN-US&quot;&gt;rgba&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; &lt;/span&gt;на 1 (непрозрачно), потому что &lt;span lang=&quot;EN-US&quot;&gt;Google&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; &lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Chrome&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; &lt;/span&gt;помнит&lt;br /&gt;
//предыдущее значение, которое мы устанавливали, рисуя облака (круги) на заднем фоне, в&lt;br /&gt;
//&lt;span lang=&quot;EN-US&quot;&gt;Firefox&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt; &lt;/span&gt;и &lt;span lang=&quot;EN-US&quot;&gt;Safari&lt;/span&gt; этого не происходит&lt;br /&gt;
&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;var gradient = ctx.createRadialGradient(that.x + (platformWidth/2), that.y + (platformHeight/2), 5, that.x + (platformWidth/2), that.y + (platformHeight/2), 45);&lt;br /&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;gradient.addColorStop(0, that.firstColor);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;gradient.addColorStop(1, that.secondColor);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;ctx.fillStyle = gradient;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;ctx.fillRect(that.x, that.y, platformWidth, platformHeight);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;//&lt;/span&gt;заполняем прямоугольную платформу градиентной заливкой&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;};&lt;/span&gt;&lt;br /&gt;
return that;&lt;br /&gt;
};&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Платформы должна быть нарисованы на каждом кадре, так что обновление&amp;nbsp;GameLoop ()&amp;nbsp;является обязательным.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;var GameLoop = function(){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;(...)&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;platforms.forEach(function(platform){&lt;/span&gt;platform.draw();&lt;br /&gt;
});&lt;br /&gt;
(...)&lt;br /&gt;
};&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUl8qjrwxCZH7o8e3734spdyYlJ42dTW4oMK0skDVj8QxMbjAgXhXLB_Sd3j5OpsG1X3F3BcRttYvrATGjuQFPh41QIi6met__VZHGREIryp05zVeWPSjGf_jpxUZQXk_0Lr1OYFrKNlxg/s1600/%25D0%25B7%25D0%25B0%25D0%25B3%25D1%2580%25D1%2583%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25BD%25D0%25BE%25D0%25B5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUl8qjrwxCZH7o8e3734spdyYlJ42dTW4oMK0skDVj8QxMbjAgXhXLB_Sd3j5OpsG1X3F3BcRttYvrATGjuQFPh41QIi6met__VZHGREIryp05zVeWPSjGf_jpxUZQXk_0Lr1OYFrKNlxg/s320/%25D0%25B7%25D0%25B0%25D0%25B3%25D1%2580%25D1%2583%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25BD%25D0%25BE%25D0%25B5.png&quot; width=&quot;204&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt;Часть 4б.&amp;nbsp;СТОЛКНОВЕНИЯ&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Чудненько, но нет взаимодействия между ангелом и платформами.&amp;nbsp;Одна маленькая функция исправит ситуацию.&amp;nbsp;Позвольте мне представить checkCollision ():&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;var checkCollision = function(){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;platforms.forEach(function(e, ind){&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;//&lt;/span&gt;проверяем каждую платформу&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;if (&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(player.isFalling) &amp;amp;&amp;amp;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;//&lt;/span&gt;только когда персонаж падает&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(player.X &amp;lt; e.x + platformWidth) &amp;amp;&amp;amp;&lt;br /&gt;
&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(player.X + player.width &amp;gt; e.x) &amp;amp;&amp;amp;&lt;br /&gt;
&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(player.Y + player.height &amp;gt; e.y) &amp;amp;&amp;amp;&lt;br /&gt;
&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;(player.Y + player.height &amp;lt; e.y + platformHeight)&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;//и находится прямо над платформой&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;) {&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;e.onCollide();&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;})&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;Еще одно обновление основного цикла (подходящий момент, чтобы закомментировать функцию&amp;nbsp;MoveCircles (), если платформы стоят на месте, почему фон движется? будет больше смысла, когда мы будем осуществлять прокрутку платформ и фона одновременно). Так GameLoop ()&amp;nbsp;функция должна выглядеть в настоящее время:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;var GameLoop = function(){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;clear();&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;//MoveCircles(5);&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;DrawCircles();&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;if (player.isJumping) player.checkJump();&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;if (player.isFalling) player.checkFall();&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;platforms.forEach(function(platform){&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;platform.draw();&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;});&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;checkCollision();&lt;/span&gt;&lt;br /&gt;
&lt;span lang=&quot;EN-US&quot;&gt;player.draw();&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;gLoop = setTimeout(GameLoop, 1000 / 50);&lt;/span&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 10pt; line-height: 115%;&quot;&gt;Рез&lt;/span&gt;&lt;span style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #222222; font-family: Arial, sans-serif; font-size: 10pt; line-height: 115%;&quot;&gt;ультат этой части урока можно посмотреть по адресу: &lt;a href=&quot;http://jsbin.com/igeta3/&quot;&gt;http://jsbin.com/igeta3/&lt;/a&gt;, а скачать исходники тут: &lt;a href=&quot;http://guthub.com/michalbe/Simple-game-with-HTML5-Canvas&quot;&gt;http://guthub.com/michalbe/Simple-game-with-HTML5-Canvas&lt;/a&gt;. Думаю следующая часть будет последней, но кто знает;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 115%;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394; font-size: large;&quot;&gt;Копирайты.&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #222222; font-family: Arial, sans-serif; font-size: 10pt; line-height: 115%;&quot;&gt;Автор: Михал Будзинский &lt;a href=&quot;https://twitter.com/#!/@michalbe&quot;&gt;https://twitter.com/#!/@michalbe&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #222222; font-family: Arial, sans-serif; font-size: 10pt; line-height: 115%;&quot;&gt;Автор перевода: Андрей Семенов &lt;a href=&quot;https://twitter.com/#!/a_semenov79&quot;&gt;https://twitter.com/#!/a_semenov79&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/8165670091433425878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/11/html5-canvas-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/8165670091433425878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/8165670091433425878'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/11/html5-canvas-4.html' title='Простая игра на HTML5 Canvas – часть 4'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUl8qjrwxCZH7o8e3734spdyYlJ42dTW4oMK0skDVj8QxMbjAgXhXLB_Sd3j5OpsG1X3F3BcRttYvrATGjuQFPh41QIi6met__VZHGREIryp05zVeWPSjGf_jpxUZQXk_0Lr1OYFrKNlxg/s72-c/%25D0%25B7%25D0%25B0%25D0%25B3%25D1%2580%25D1%2583%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25BD%25D0%25BE%25D0%25B5.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-365945143733603446</id><published>2011-11-02T12:56:00.000-07:00</published><updated>2011-11-03T20:58:27.300-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTML HTML5 CSS JS JavaScript Game StH"/><title type='text'>Простая игра на HTML5 Canvas - часть 3</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394; font-size: large;&quot;&gt;&lt;b style=&quot;background-color: white;&quot;&gt;Часть 3а. Физика&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZC4Hz3HQspF1HYHL3xw7A8Gl6szeJw3CVHbqcQCXRApfoWprey_WpMWP3MJJsoXkE_O9i2Elkhim1SoQz1C94njrxRwOGyAukDlFQplxqILv-np0XE_RlhvWQWhCfBv03K3tYBRrIJgv7/s1600/%25D0%25B7%25D0%25B0%25D0%25B3%25D1%2580%25D1%2583%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25BD%25D0%25BE%25D0%25B5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZC4Hz3HQspF1HYHL3xw7A8Gl6szeJw3CVHbqcQCXRApfoWprey_WpMWP3MJJsoXkE_O9i2Elkhim1SoQz1C94njrxRwOGyAukDlFQplxqILv-np0XE_RlhvWQWhCfBv03K3tYBRrIJgv7/s320/%25D0%25B7%25D0%25B0%25D0%25B3%25D1%2580%25D1%2583%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25BD%25D0%25BE%25D0%25B5.png&quot; style=&quot;float: right; margin-left: 10px;&quot; width=&quot;204&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Потому что физика в StH очень проста, нет никакой необходимости включать какой-то физический движок, как например Box2d (http://box2d-js.sourceforge.net/). Прыжки главного персонажа настолько просты, что реализуются в нескольких строках кода. Давайте разделим его на две несвязанные части - прыжки и падения. Когда объект начинает прыгать, он имеет некоторую начальную скорость, снижающуюся под действием силы тяжести. Это стадия заканчивается, когда эта скорость полностью сводится к нулю и гравитация начинает тянуть объект вниз с нарастающей силой. Это вторая часть прыжка - падение. Научим ангела, как себя вести в таких ситуациях, давайте расширим объект ‘player’ добавив несколько атрибутов &lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;var &amp;nbsp;player = new (function(){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;var &amp;nbsp;that = this;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.image &amp;nbsp;= new Image();&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;(...)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;//новые атрибуты&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.isJumping &amp;nbsp;= false;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.isFalling &amp;nbsp;= false;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;//состояние объекта в булевых переменных (взлет или падение)?&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.jumpSpeed &amp;nbsp;= 0;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallSpeed &amp;nbsp;= 0;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//ускорение взлета и падения&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;(...) //остальная часть кода&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;})();&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&amp;nbsp;Теперь &amp;nbsp;давайте внедрять методы ответственные за прыжки. Дальнейшее &amp;nbsp;расширение объекта ‘player’:&amp;nbsp;&lt;/div&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;that.jump = function() {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//инициализация прыжка&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (!that.isJumping &amp;amp;&amp;amp; &amp;nbsp;!that.isFalling) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//сначала &amp;nbsp;проверим - объект не должен находиться в состоянии взлета или падения,&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//чтобы &amp;nbsp;не подпрыгивать не имея опоры (из воздуха)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallSpeed = 0;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.isJumping = true;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.jumpSpeed = 17;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//начальная скорость&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.checkJump = function() {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//начинаем взлетать&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.setPosition(that.X, &amp;nbsp;that.Y - that.jumpSpeed);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//перемещаемся &amp;nbsp;вверх с приростом на jumpSpeed пикселей&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.jumpSpeed--;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//имитируем &amp;nbsp;гравитацию уменьшая ускорение взлета&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (that.jumpSpeed == 0) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//и &amp;nbsp;если ускорение взлета упало до нуля, начинаем падать&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.isJumping = false;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.isFalling = true;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallSpeed = 1;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.checkFall = function(){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//почти &amp;nbsp;тоже, что и checkJump()&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (that.Y &amp;lt; height - &amp;nbsp;that.height) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//проверяем, &amp;nbsp;не достигнут ли нижний край экрана и увеличиваем fallSpeed&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//(ускорение &amp;nbsp;свободного падения)...&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.setPosition(that.X, &amp;nbsp;that.Y + that.fallSpeed);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallSpeed++;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;} else {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//.. иначе – отскок (снова взлетаем)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallStop();&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallStop = function(){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//хватит &amp;nbsp;падать, пора снова взлетать&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.isFalling = false;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.fallSpeed = 0;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.jump(); &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Это обязательно обновлять основные функции цикла для перерисовки позиции нашего персонажа во время прыжков и падений. Обновляем GameLoop (игровой цикл) таким кодом, прежде чем перерисовать персонаж:&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;if (player.isJumping) player.checkJump();&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (player.isFalling) player.checkFall();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Я думаю, что код показанный выше достаточно прост для понимания. Последнее действие, которое мы должны выполнить, просто запустить первый прыжок, сразу после размещения персонажа на сцене.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;player.setPosition(~~((width-player.width)/2), &amp;nbsp;~~((height - player.height)/2));&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;player.jump(); //здесь&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Хорошо, красиво прыгает, фрагмент удивительного псевдо-физического кода. Теперь давайте сделаем некоторые элементы управления.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394; font-size: large;&quot;&gt;&lt;b&gt;Часть 3b. Управление&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Главный герой StH может двигаться только вбок. Он подпрыгивает автоматически, вверх/вниз движения будут зависеть от платформ. Пользователь может только командовать ангелу, переместиться влево или вправо. Опять же, это может быть достигнуто путем расширения объекта ‘player’ дополнительными методами.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;var player = new(function(){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;(...)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.moveLeft = function(){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (that.X &amp;gt; 0) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//проверим не вышли ли мы за &amp;nbsp;область экрана&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.setPosition(that.X - 5, that.Y);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.moveRight = function(){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (that.X + that.width &amp;lt; width) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;// проверим не вышли ли мы &amp;nbsp;за область экрана&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;that.setPosition(that.X + 5, that.Y);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;(...)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;})();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;Теперь привяжем функцию к положению курсора мыши (ангел будет следовать за ним).&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;document.onmousemove = &amp;nbsp;function(e){&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;if (player.X + c.offsetLeft &amp;nbsp;&amp;gt; e.pageX) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//если мышь слева от персонажа сдвигаем его влево.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;player.moveLeft();&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;} else if (player.X + &amp;nbsp;c.offsetLeft &amp;lt; e.pageX) {&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;//иначе направо?&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;player.moveRight();&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Это все на сегодня. В следующей части ​​я покажу рисование платформ и контроль столкновений. Как обычно, результат этой части урока можно посмотреть по адресу: http://jsbin.com/uhaka3/, а скачать исходники тут: http://guthub.com/michalbe/Simple-game-with-HTML5-Canvas&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394; font-size: large;&quot;&gt;&lt;b&gt;Копирайты.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Автор: Михал Будзинский https://twitter.com/#!/@michalbe&lt;br /&gt;
&lt;br /&gt;
Автор перевода: Андрей Семенов https://twitter.com/#!/a_semenov79&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/365945143733603446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/11/html5-canvas-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/365945143733603446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/365945143733603446'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/11/html5-canvas-3.html' title='Простая игра на HTML5 Canvas - часть 3'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZC4Hz3HQspF1HYHL3xw7A8Gl6szeJw3CVHbqcQCXRApfoWprey_WpMWP3MJJsoXkE_O9i2Elkhim1SoQz1C94njrxRwOGyAukDlFQplxqILv-np0XE_RlhvWQWhCfBv03K3tYBRrIJgv7/s72-c/%25D0%25B7%25D0%25B0%25D0%25B3%25D1%2580%25D1%2583%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25BD%25D0%25BE%25D0%25B5.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-6737066522717286997</id><published>2011-10-29T05:07:00.000-07:00</published><updated>2011-10-29T05:07:07.285-07:00</updated><title type='text'>Простая игра на HTML5 Canvas – часть 2</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;h1 style=&quot;color: #365f91; font-family: Cambria, serif; font-size: 14pt; line-height: 21px; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 24pt; page-break-after: avoid; text-align: -webkit-auto;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #4f81bd; font-size: 17px; line-height: 19px;&quot;&gt;Персонаж&lt;/span&gt;&lt;/h1&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: justify;&quot;&gt;Пришло время добавить главного героя на наш чудесный фон созданный в предыдущей части урока. В&amp;nbsp;&lt;b&gt;&lt;span lang=&quot;EN-US&quot;&gt;StH&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;это будет милый маленький ангел с простой анимацией хлопающих крыльев, состоящей всего из двух кадров, сохраненных в одном файле формата&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;PNG&lt;/span&gt;.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKVT3pzZDnD4iuuYeP-vbxEFnAj3ifYrqJrqAP1aLJkLtVyVTvCKrZCG522Mtv75vXcdRPDZ-klNmVVHA7aZSwmu8qgQHwnntiFMgpGJOolUUgz2o_fRQWKrIop5QItgXk5XIk-ls3UmXo/s1600/image001.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKVT3pzZDnD4iuuYeP-vbxEFnAj3ifYrqJrqAP1aLJkLtVyVTvCKrZCG522Mtv75vXcdRPDZ-klNmVVHA7aZSwmu8qgQHwnntiFMgpGJOolUUgz2o_fRQWKrIop5QItgXk5XIk-ls3UmXo/s1600/image001.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: justify;&quot;&gt;Давайте создадим объект, представляющий главного героя со всеми необходимыми атрибутами и методами. Назовем объект ‘&lt;span lang=&quot;EN-US&quot;&gt;player&lt;/span&gt;’ (англ. – игрок). Далее мной выбран не лучший способ описания объекта в&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;JS&lt;/span&gt;, потому что все атрибуты являются доступными, а закрытые не применяются вообще. Но это простейшее решение, позволяющее уложиться в запланированные 10КБ, а главное что это работает. Если вам захочется узнать о закрытых атрибутах и методах, наследовании и т.п. прочитайте об этом в учебнике по&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;JavaScript&lt;/span&gt;&amp;nbsp;(на англ.языке можно прочитать тут -&amp;nbsp;&lt;a href=&quot;http://jibbering.com/faq/notes/closures/&quot; style=&quot;color: blue;&quot;&gt;http://jibbering.com/faq/notes/closures/&lt;/a&gt;&amp;nbsp;). Также важно помнить что если вы соберетесь уменьшить код с помощью онлайн инструментов, таких как ‘&lt;span lang=&quot;EN-US&quot;&gt;Closure&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Compiler&lt;/span&gt;’ (&lt;a href=&quot;http://closure-compiler.appspot.com/home&quot; style=&quot;color: blue;&quot;&gt;http://closure-compiler.appspot.com/home&lt;/a&gt;) что имена аргументов объектов он не сокращает. Именно поэтому я использую 2-х буквенные сокращения для описания объекта, например, ‘&lt;span lang=&quot;EN-US&quot;&gt;player&lt;/span&gt;.&lt;span lang=&quot;EN-US&quot;&gt;im&lt;/span&gt;’ вместо ‘&lt;span lang=&quot;EN-US&quot;&gt;player&lt;/span&gt;.&lt;span lang=&quot;EN-US&quot;&gt;image&lt;/span&gt;’. Итак, вот код, который добавляется в наш&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;game.js&lt;/span&gt;:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;player&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;(){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//создаем новый объект основанный на функции&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;и присваиваем его переменной&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;‘player’&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var that = this;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&#39;that&#39;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;– псевдоним этого объекта&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//attributes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.image = new Image();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.image.src = &quot;angel.png&quot;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//создаем новый&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;Image&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;элемент и&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&#39;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;angel&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;png&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&#39; закачиваем в него&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;that.width = 65;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ширина одного кадра&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.height = 95;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//высота одного кадра (рисунок в 2 раза выше, ведь в нем 2 кадра)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;that.X = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.Y = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;Y&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;позиция объекта на холсте&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;далее описываем методы&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.setPosition = function(x, y){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.X = x;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.Y = y;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.draw = function(){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.drawImage(that.image, 0, 0, that.width, that.height, that.X, that.Y, that.width, that.height);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//отрисовываем наш персонаж функцией&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;drawImage&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;(объект-рисунок,&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;X&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;источника,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;Y&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;источника, ширина источника, высота источника,&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;X&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;назначения (&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;X&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;позиция),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;Y&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;назначения (&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;Y&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;позиция), ширина назначения, высота назначения)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;} catch (e) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//Иногда, если изображение персонажа слишком велико и еще не успело&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//загрузиться до вывода первого кадра,&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;JavaScript&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;выдаст ошибку и прекратит&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//выполнение всего. Чтобы этого избежать, мы перехватываем ошибку и повторим&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//попытку рисования в следующем кадре. Это незаметно для пользователей ведь&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//частота кадров 50 в секунду.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;})();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//мы сразу же применим функции описанные выше&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//и создадим переменную&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;‘player’&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//как новый объект&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;player.setPosition(~~((width-player.width)/2),&amp;nbsp;&amp;nbsp;~~((height - player.height)/2));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//наш персонаж готов, давайте переместим его&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//в центр экрана,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&#39;~~&#39; возвращает округленное вниз целое значение&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//переменной с плавающей точкой, как это делает&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;Math&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;floor&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: justify;&quot;&gt;Итак, теперь&amp;nbsp;&amp;nbsp;необходимо перерисовывать нашего ангела на каждом кадре в игровом цикле с помощью&amp;nbsp;&amp;nbsp;функции&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;‘player.draw’&lt;/span&gt;:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var GameLoop = function(){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;clear();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MoveCircles(5);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DrawCircles();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;player.draw();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gLoop = setTimeout(GameLoop, 1000 / 50);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: justify;&quot;&gt;Ну а как насчет анимации? Спрайт (файл с изображением ангела) имеет 2 кадра, но только один из них перерисовывается на каждом кадре. Для того, чтобы анимировать наш персонаж потребуются дополнительные атрибуты и небольшие изменения метода ‘&lt;span lang=&quot;EN-US&quot;&gt;draw&lt;/span&gt;’:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var player = new (function(){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;(...)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.frames = 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;нумерация кадров начинается с нуля&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.actualFrame = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//текущий кадр&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;that&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;interval&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;= 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//нам не прийдется переключать кадры&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//в игровом цикле, ‘&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;interval&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;’ позаботится об этом&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.draw = function(){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.drawImage(that.image, 0, that.height * that.actualFrame, that.width, that.height, that.X, that.Y, that.width, that.height);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//третий аргумент умножается на номер текущего кадра, чтобы показать нужную&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//часть исходного изображения&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;) {};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;if (that.interval == 4 ) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (that.actualFrame == that.frames) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.actualFrame = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.actualFrame++;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.interval = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that.interval++;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//выше показана простая логика переключающая кадры каждые 4 итерации&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;})();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: -webkit-auto;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: justify;&quot;&gt;Спасибо за внимание! Результат работы проделанной в данной части урока, как обычно, можно посмотреть по адресу:&amp;nbsp;&lt;a href=&quot;http://jsbin.com/orohe4/&quot; style=&quot;color: blue;&quot;&gt;http://jsbin.com/orohe4/&lt;/a&gt;, а исходники скачать тут:&amp;nbsp;&lt;a href=&quot;http://github.com/michalbe/Simple-game-with-HTML5-Canvas/tree/master/part2/&quot; style=&quot;color: blue;&quot;&gt;http://github.com/michalbe/Simple-game-with-HTML5-Canvas/tree/master/part2/&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 17px; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; text-align: justify;&quot;&gt;&lt;/div&gt;&lt;h2 style=&quot;background-color: white; color: #4f81bd; font-family: Cambria, serif; font-size: 13pt; font: normal normal bold 11px/normal Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 10pt; page-break-after: avoid; position: relative; text-align: left; text-indent: 0cm; text-transform: uppercase;&quot;&gt;КОПИРАЙТЫ.&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; color: #222222; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: left;&quot;&gt;Автор: Михал Будзинский&amp;nbsp;&lt;a href=&quot;https://twitter.com/#!/@michalbe&quot; style=&quot;color: #249fa3; text-decoration: none;&quot;&gt;&lt;span class=&quot;-&quot;&gt;https://twitter.com/#!/@michalbe&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;background-color: white; color: #222222; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: left;&quot;&gt;Автор перевода: Андрей Семенов&amp;nbsp;&lt;a href=&quot;https://twitter.com/#!/@a_semenov79&quot; style=&quot;color: #249fa3; text-decoration: none;&quot;&gt;&lt;span class=&quot;-&quot;&gt;https://twitter.com/#!/&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;https://twitter.com/#!/@a_semenov79&quot; style=&quot;color: #249fa3; text-decoration: none;&quot;&gt;&lt;span class=&quot;-&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;a_semenov79&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/6737066522717286997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/html5-canvas-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/6737066522717286997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/6737066522717286997'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/html5-canvas-2.html' title='Простая игра на HTML5 Canvas – часть 2'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKVT3pzZDnD4iuuYeP-vbxEFnAj3ifYrqJrqAP1aLJkLtVyVTvCKrZCG522Mtv75vXcdRPDZ-klNmVVHA7aZSwmu8qgQHwnntiFMgpGJOolUUgz2o_fRQWKrIop5QItgXk5XIk-ls3UmXo/s72-c/image001.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-5105938557885623494</id><published>2011-10-27T14:05:00.000-07:00</published><updated>2011-10-27T15:32:16.511-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTML5 JavaScript CSS3 JS game"/><title type='text'>Простая игра на HTML5 Canvas - часть 1</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;h1 style=&quot;color: #365f91; font-family: Cambria, serif; font-size: 14pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 24pt; page-break-after: avoid; page-break-before: always; text-indent: 0cm;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #4f81bd; font-size: 17px; line-height: 18px;&quot;&gt;Предисловие от автора перевода.&lt;/span&gt;&lt;/h1&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Итак, я наконец-то подготовил перевод статьи Михала Будзинского открывающей нам новый&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;web&lt;/span&gt;-стандарт&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;HTML&lt;/span&gt;5. Этот стандарт еще не имеет утвержденной спецификации и представлен на сайте&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;w&lt;/span&gt;3.&lt;span lang=&quot;EN-US&quot;&gt;org&lt;/span&gt;&amp;nbsp;только как рабочий черновик, но уже активно продвигается производителями браузеров. Новшества, вносимые новой версией HTML (язык разметки гипертекстов) сближают его с языками программирования. Благодаря активному развитию социальных сетей, «облачных» сервисов и т.п. все яснее прослеживается необходимость улучшения интеграции мультимедийного контента и новый тэг &amp;lt;&lt;span lang=&quot;EN-US&quot;&gt;canvas&lt;/span&gt;&amp;gt; стал одним из решений данного вопроса представленный консорциумом.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Движок игры написан на&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;JavaScript&lt;/span&gt;&amp;nbsp;и те, кто еще не знаком с этим языком программирования найдут здесь также замечательные примеры для его начального освоения.&lt;/div&gt;&lt;h2 style=&quot;color: #4f81bd; font-family: Cambria, serif; font-size: 13pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 10pt; page-break-after: avoid; text-indent: 0cm;&quot;&gt;Введение.&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;b&gt;StH&lt;/b&gt;&amp;nbsp;- очень простой клон&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;Doodle&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Jump&lt;/span&gt;, но чтобы быть до конца честным, я был вдохновлен&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;Icy&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Tower&lt;/span&gt;. Ну да ладно.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Цель игры состоит в том, чтобы управлять маленьким ангелом и скакать на двух видах платформ - оранжевые (обычные) и зеленые (трамплины). Игра заканчивается, когда ангел падает&amp;nbsp;за нижний край экрана.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Я создал эту игру за 8 часов и позже, когда довольно долго играл, я обнаружил немного ошибок,&amp;nbsp;&amp;nbsp;так что в этом уроке, я хочу исправить их все. Давайте приступим&lt;span style=&quot;color: #333333; font-family: &#39;Arial CYR&#39;, sans-serif; font-size: 8.5pt;&quot;&gt;!&lt;/span&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #4f81bd; font-family: Cambria, serif; font-size: 13pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 10pt; page-break-after: avoid; text-indent: 0cm;&quot;&gt;Фон.&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Поскольку вся игра, включая изображения и сценарии (скрипты), не должна быть больше 10КБ, я не захотел использовать растровое изображение на фоне. Гораздо экономичнее рисовать используя функции рисования &amp;lt;&lt;span lang=&quot;EN-US&quot;&gt;canvas&lt;/span&gt;&amp;gt;.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Прежде всего, мы нуждаемся в небольшом HTML, ничего особенного, только один &amp;lt;&lt;span lang=&quot;EN-US&quot;&gt;canvas&lt;/span&gt;&amp;gt; элемент с некоторым уникальным id, немного CSS и несуществующий, пока еще, game.js:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt; Простая игра с HTML5 Canvas &amp;lt;/ title&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;style&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;body {margin:0px; padding:0px; text-align: center}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;canvas {outline:0; border:1px solid # 000; margin: 0 auto}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;/&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;head&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;canvas id=&#39;c&#39;&amp;gt;&amp;lt;/ canvas&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script src=&quot;game.js&quot;&amp;gt;&amp;lt;/ script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;/&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;/&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Это и есть весь HTML, который нам понадобится в течение этого урока. Хорошо, теперь давайте создавать Javascript. Прежде всего мы должны создать немного глобальных (хотя, я знаю что это Глобальное зло =) переменных и изменить атрибуты (свойства) &amp;lt;&lt;span lang=&quot;EN-US&quot;&gt;canvas&lt;/span&gt;&amp;gt;. Этого будет достаточно:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var width = 320, //&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ширина&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;canvas&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;height = 500, //&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;высота&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;canvas&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;c = document.getElementById(&#39;c&#39;), //&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;сам&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;canvas&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;getContext&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;(&#39;2&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&#39;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//двумерный контектс&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;(сейчас только он поддерживается всеми&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//браузерами)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;c.width = width;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;c.height = height;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;устанавливаем размеры&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;canvas&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Первое, что важно понять про &amp;lt;&lt;span lang=&quot;EN-US&quot;&gt;canvas&lt;/span&gt;&amp;gt;, это то, что невозможно просто перемещать объекты на его поверхности. Нужно, обязательно, на каждом кадре его очищать, целиком или частично. Поэтому давайте создадим функцию очистки –&amp;nbsp;&lt;b&gt;&lt;span lang=&quot;EN-US&quot;&gt;clear&lt;/span&gt;():&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ctx&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;fillStyle&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;= &#39;#&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;7&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;9&#39;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//выбираем цвет заливки (чудесный голубой)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//Использование&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;clearRect&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;() вызывало ошибку, в 2-х строках ниже показан&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;старый вариант&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//ctx.clearRect(0, 0, width, height);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;очистка экрана&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;ctx.beginPath();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;запускаем рисование&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;ctx.rect(0, 0, width, height);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//рисуем прямоугольник из точки (0, 0) до (&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;) заполняя весь наш&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;холст &amp;lt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ctx.closePath();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;заканчиваем рисование&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;ctx.fill();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;заполняем прямоугольник цветом выбранным ранее&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Одноцветный&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;фон скучен как ад, так что давайте&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;на&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;рису&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ем&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;не&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ск&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;ольк&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;о&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;облаков на нем. Скорее не правильные облака, а простые, полупрозрачные круги, подражающие облакам. Круги мы будем рисовать в случайных местах холста, каждый с различным размером и прозрачностью. Мы будем держать всю информацию о кругах в 2-ом массиве (в&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;JS&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;их нет, но лучший путь к решению этой проблемы помещение одного массива в другой).&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var howManyCircles = 10, circles = [];&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;for (var i = 0; i &amp;lt; howManyCircles; i++)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;circles.push([Math.random() * width, Math.random() * height, Math.random() * 100, Math.random() / 2]);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//добавляем информацию о кругах&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//в массив &#39;circles&#39;. Это x и y позиция,&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//радиус в диапазоне 0-100 и прозрачность&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//в диапазоне 0-0.5 (0 это абсолютно прозрачно, 1 непрозрачно)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var DrawCircles = function(){&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;for (var i = 0; i &amp;lt; howManyCircles; i++) {&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.fillStyle = &#39;rgba(255, 255, 255, &#39; + circles[i][3] + &#39;)&#39;;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//белый цвет с прозрачностью в rgba&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.beginPath();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.arc(circles[i][0], circles[i][1], circles[i][2], 0, Math.PI * 2, true);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//arc(x, y, radius, startAngle, endAngle, anticlockwise)&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.closePath();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ctx.fill();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoBodyText&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;Хорош&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;о&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;, но скучн&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;овато&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;. Почему облака стоят на месте? Давайте сделаем маленьк&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ую&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;функци&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ю&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;с одним аргумент&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ом&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;, котор&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ая&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;с&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;дви&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;гает&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;облака вниз&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;на&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;заданное число пикселей, и, когда определенн&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ый&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;круг скрывается&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;за пределами&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;холста,&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;он перемещает&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ся&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&amp;nbsp;навер&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;х&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;с изменением&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;координаты&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;X, радиус&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;а&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;и прозрачност&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;и&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var MoveCircles = function(deltaY){&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;for (var i = 0; i &amp;lt; howManyCircles; i++) {&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (circles[i][1] - circles[i][2] &amp;gt; height) {&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;круг достигший нижнего края&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;меняет параметры&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;circles[i][0] = Math.random() * width;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;circles[i][2] = Math.random() * 100;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;circles[i][1] = 0 - circles[i][2];&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;circles[i][3] = Math.random() / 2;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;сдвигаем круг на&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;deltaY&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;пикселей вниз&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;circles[i][1] += deltaY;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 10pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;Теперь, не в последнюю очередь, давайте создадим основной цикл игры и подключи&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;м&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;в нем&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;все, что&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;уже создали&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;. Каждый кадр будет очищать экран, перемещ&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ать&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;круг&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;и на&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;5px&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;вниз,&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;рисоват&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;ь их и после 1/50&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;секунды&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;выз&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;ывать следующий&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;кадр. Я использую два setTimeouts&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;вместо&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;одного setInterval,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;хотя незнаю&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;почему:).&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Вроде бы&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;раньше&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;был&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;и&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;некоторые проблемы с производительностью в IE, что ли.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;И&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;&amp;nbsp;не забудьте добавить&amp;nbsp;&lt;i&gt;gLoop&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;в глобальные переменные&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;объ&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333;&quot;&gt;явленные вначале.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var width = 320,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;ширина&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;холста&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;canvas&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;height = 500,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;высота&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;холста&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;canvas&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;gLoop,&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;(...) //&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;остальная часть кода находится здесь&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;var GameLoop = function(){&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;clear();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;MoveCircles(5);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;DrawCircles();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;gLoop = setTimeout(GameLoop, 1000 / 50);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;color: #333333; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;GameLoop();&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Благодарю Луиса Гирибоуна за комментарии к уроку. Он помог разобраться в чем отличие&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;setTimeOut&amp;nbsp;&lt;/span&gt;от&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;setInterval. SetInterval&amp;nbsp;&lt;/span&gt;запускает функцию переданную ему в аргументе не дожидаясь окончания предыдущей итерации, а&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;setTimeOut&amp;nbsp;&lt;/span&gt;ждет ее завершения даже если вышло время переданное в качестве второго аргумента.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Так же хочу поблагодарить пользователя под ником&amp;nbsp;&lt;span lang=&quot;EN-US&quot;&gt;Ped7g&amp;nbsp;&lt;/span&gt;за выявленные ошибки.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid; text-align: justify;&quot;&gt;Результат этой части урока можно посмотреть по адресу:&amp;nbsp;&lt;a href=&quot;http://jsbin.com/odoho3&quot;&gt;&lt;span class=&quot;-&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;http://jsbin.com/odoho3&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;, а скачать исходники тут:&amp;nbsp;&lt;a href=&quot;http://github.com/michalbe/Simple-game-with-HTML5-Canvas&quot;&gt;&lt;span class=&quot;-&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;http://github.com/michalbe/Simple-game-with-HTML5-Canvas&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #4f81bd; font-family: Cambria, serif; font-size: 13pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 10pt; page-break-after: avoid; text-indent: 0cm;&quot;&gt;Копирайты.&lt;/h2&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;Автор: Михал Будзинский&amp;nbsp;&lt;a href=&quot;https://twitter.com/#!/@michalbe&quot;&gt;&lt;span class=&quot;-&quot;&gt;https://twitter.com/#!/@michalbe&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;font-family: Calibri, sans-serif; font-size: 11pt; line-height: 13.8pt; margin-bottom: 0.0001pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; page-break-after: avoid;&quot;&gt;Автор перевода: Андрей Семенов&amp;nbsp;&lt;a href=&quot;https://twitter.com/#!/@a_semenov79&quot;&gt;&lt;span class=&quot;-&quot;&gt;https://twitter.com/#!/&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;https://twitter.com/#!/@a_semenov79&quot;&gt;&lt;span class=&quot;-&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;a_semenov79&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/5105938557885623494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/html5-canvas-1.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/5105938557885623494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/5105938557885623494'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/html5-canvas-1.html' title='Простая игра на HTML5 Canvas - часть 1'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-6877010917867975452</id><published>2011-10-25T11:54:00.000-07:00</published><updated>2011-10-25T11:54:21.032-07:00</updated><title type='text'>SVG. Масштабируемая векторная графика. Часть 4</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;div type=&quot;HEADER&quot;&gt;&lt;div lang=&quot;en-US&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 32px; font-weight: bold;&quot;&gt;Градиенты и текстуры.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;А как же градиенты, спросите вы, но я отвечу - это тоже просто. В спецификации определено два типа градиента: линейный и радиальный.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Градиенты положено помещать внутрь тэга контейнера &amp;lt;defs&amp;gt; (&lt;/span&gt;&lt;em&gt;&lt;span style=&quot;color: black;&quot;&gt;от англ. definitions - определения&lt;/span&gt;&lt;/em&gt;&lt;span style=&quot;color: black;&quot;&gt;), это говорит о том, что содержимое предназначено для многократного применения. Линейный градиент определен парным тэгом &amp;lt;linearGradient&amp;gt;, (а что же должно быть внутри?) который включает в себя тэги &amp;lt;stop /&amp;gt;. В спецификации об этом сказано: &quot;Буйство красок, чтобы использовать в градиенте определено элементами &#39;stop&#39;, которые являются дочерними элементами ‘linearGradient’ элемента или ‘radialGradient’ элемента.&quot; Разберем вышесказаное на примере градиента для нашего первого элемента (прямоугольника с фоном):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;defs&amp;gt;
        &amp;lt;linearGradient id=&quot;sky_n_water&quot;&amp;gt;
                &amp;lt;stop offset=&quot;0%&quot; stop-color=&quot;#09f&quot; /&amp;gt;
                &amp;lt;stop offset=&quot;35%&quot; stop-color=&quot;#9ff&quot; /&amp;gt;
                &amp;lt;stop offset=&quot;36%&quot; stop-color=&quot;#fff&quot; /&amp;gt;
                &amp;lt;stop offset=&quot;100%&quot; stop-color=&quot;#09f&quot; /&amp;gt;
        &amp;lt;/linearGradient&amp;gt;
&amp;lt;/defs&amp;gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnaSdmmWuHx7q6ymfprHH9d00LcWmhFO8uK-tyUlmAni90L589ejxL1GO-1z6nOuJEkszPYGHnL9SV8Fzrhleu9wR7wAwDbfqj7xuDfmsUmql7_4yJKwzuS2YUq-EhhD4Pd_Bld76TCml/s1600/ps.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;244&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnaSdmmWuHx7q6ymfprHH9d00LcWmhFO8uK-tyUlmAni90L589ejxL1GO-1z6nOuJEkszPYGHnL9SV8Fzrhleu9wR7wAwDbfqj7xuDfmsUmql7_4yJKwzuS2YUq-EhhD4Pd_Bld76TCml/s320/ps.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Вот они наши запланированые переходы в верхней части от темно-синего к светло-синему, а ниже от белого к темно-синему изображающие небо и воду.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Рекомендую, для проектирования градиентов использовать Фотошоп и для этого несколько причин. Во-первых в &quot;Редакторе градиентов&quot; мы видим удобную шкалу на которой размещаем наши контрольные точки (тэги &amp;lt;stop /&amp;gt;) и offset атрибут мы видим в поле &quot;Позиция&quot;, что можно считать вторым плюсом, а в третьих на &quot;Палитре цветов&quot; поставив галочку в &quot;Только Web-цвета&quot; мы в поле &quot;#&quot; видим код RGB 0099ff, который можно смело сокращать до трех цифр 09f и писать их в stop-color атрибут.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGCEeWiSagn23k_pcSS2VEpwIu6485rAWbKnY3-jFxUPVB1bSha0KZJGHS2c12DBAw80Nq9y_5EOOnd74IGrD5ccJLFBKKTpqX695u78GqNwDSSt-Yd8jrV35LJSjqTD2Q_akPZVNxyfAT/s1600/part4_html_19f6894a.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGCEeWiSagn23k_pcSS2VEpwIu6485rAWbKnY3-jFxUPVB1bSha0KZJGHS2c12DBAw80Nq9y_5EOOnd74IGrD5ccJLFBKKTpqX695u78GqNwDSSt-Yd8jrV35LJSjqTD2Q_akPZVNxyfAT/s1600/part4_html_19f6894a.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;br clear=&quot;LEFT&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Вот так легко и просто, но на практике мы получим прямоугольник с градиентом идущим слева-направо, вместо желанного сверху-вниз. Градиент надо повернуть и нам поможет атрибут gradientTransform = &quot;rotate(90)&quot;, который необходимо указать в тэге &amp;lt;linearGradient&amp;gt;.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Применим теперь наш первый градиент на практике:&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;defs&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #990000;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;lt;linearGradient id=&quot;sky_n_water&quot;  &lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;gradientTransform=&quot;rotate(90)&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;          &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop offset=&quot;0%&quot; stop-color=&quot;#09f&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;          &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop offset=&quot;35%&quot; stop-color=&quot;#9ff&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;          &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop offset=&quot;36%&quot; stop-color=&quot;#fff&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;          &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop offset=&quot;100%&quot; stop-color=&quot;#09f&quot; /&amp;gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;/linearGradient&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;/defs&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;/span&gt;
          &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;#bg {fill:url(#sky_n_water) #09f; stroke=&quot;none&quot;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;]]&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/span&gt;
&amp;lt;rect &lt;span lang=&quot;en-US&quot;&gt;id=&quot;bg&quot;&lt;/span&gt; width=&quot;100%&quot; height=&quot;100%&quot;/&amp;gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;А вот и новые свойства для нашей «кочки»:&lt;/span&gt;&lt;br /&gt;
&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;linearGradient id=&quot;grass&quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop offset=&quot;0&quot; stop-color=&quot;#6c0&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop offset=&quot;1&quot; stop-color=&quot;#9f3&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;/linearGradient&amp;gt;&lt;/span&gt;&lt;/span&gt;

&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;.grass {fill:url(#grass) #6c0; stroke:#090; stroke-width:1}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Обратите внимание, на этот раз для параметра offset я использовал не проценты (0 и 1 соответствуют 0% и 100%, а если бы нам понадобилась середина мы написали бы 0.5 вместо 50%).&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Радиальный градиент для цветка сделать тоже не сложно. Отличается только тэг обрамляющий наши&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;точки остановки цвета, вместо&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;linearGradient&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;используется&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;radialGradient&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&amp;lt;radialGradient id=&quot;flower&quot;&amp;gt;
   &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop stop-color=&quot;#f00&quot; offset=&quot;0&quot;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop stop-color=&quot;#f00&quot; offset=&quot;0.3&quot;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop stop-color=&quot;#fff&quot; offset=&quot;0.3&quot;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;stop stop-color=&quot;#fff&quot; offset=&quot;1&quot;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span lang=&quot;en-US&quot;&gt;&amp;lt;/radialGradient&amp;gt;&lt;/span&gt;
&lt;span lang=&quot;en-US&quot;&gt;.flower {stroke:#ccc; stroke-width:0.01; fill:url(#flower) #f00}&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Текстуры в нашем проекте не используются, хотя их успешно можно было бы применить для раскрашивания наших «кочек». Дело в том, что в&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;для текстурирования используются не только растровые текстуры, но и векторные (что важнее). И наши цветочки можно было бы вынести из основного рисунка и поместить в определения&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&amp;lt;defs&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;заключив их в тэге&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&amp;lt;pattern&amp;gt;.&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Таким образом присвоив текстуре (паттерну) идентификатор мы сможем использовать ее для заливки. Обязательно попробуйте эту методику в ваших проектах — не пожалеете.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;Трансформации&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Спецификацией предусмотренно несколько видов трансформации - это перемещение (translate), масштабирование (scale), поворот (rotate), наклон по оси Х (skewX), наклон по оси Y (skewY) и matrix, которая в своих шести параметрах может включать сумму нескольких трансформаций. Но поскольку тема матричного представления двумерного пространства выходит за рамки данной статьи примем как факт, что те из вас кто изучал &quot;Высшую математику&quot; разберутся с матричными трансформациями сами, а те кто не изучал либо будут использовать&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;пос&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;л&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;едовательность&lt;/span&gt;&amp;nbsp;простых трансформаций, либо найдут учебник по вышке и изучат матрицы самостоятельно. (заранее огорчу - к Морфиусу, Тринити и Нэо наши матрицы отношения не имеют, а их изучение скучнее просмотра одноименного фильма).&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Вот матричные трансформации для цветков. Каждая, из них, увеличивает цветок в десять раз и переносит на новое место.&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;transform=&quot;matrix(10,0,0,10,45,75)&quot;
 transform=&quot;matrix(10,0,0,10,125,60)&quot;
 transform=&quot;matrix(10,0,0,10,160,85)&quot;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Заменить ее обычными можно так:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;transform = “scale(10) translate(45,75)”&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Важно помнить, что последовательность трансформаций имеет важное значение. Поясню почему... Ось вращения для объекта&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;всегда совпадает с 0,0 и если сначала его переместить, а затем повернуть, то результат будет сильно отличаться от того, который получиться при повороте с последующим перемещением. Тоже касается и масштабирования, так как при увеличении уже перемещенного объекта увеличится и расстояние его перемещения.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7UK5WOpaxQLgvc0_wcAdNRd88isnVZf9Q3YYIVCRRaYfPum8KwfKs3btE6-w18fgjotx3In1VVpGLGWJwLDO4KW96Z5OTQmpKF2yquqbKKSKFmK78PujXumiwNOdQokFtg6lmQMmGiU23/s1600/part4_html_m735dd3f1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7UK5WOpaxQLgvc0_wcAdNRd88isnVZf9Q3YYIVCRRaYfPum8KwfKs3btE6-w18fgjotx3In1VVpGLGWJwLDO4KW96Z5OTQmpKF2yquqbKKSKFmK78PujXumiwNOdQokFtg6lmQMmGiU23/s1600/part4_html_m735dd3f1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;br clear=&quot;LEFT&quot; /&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;В проекте мы не применяем трансформацию «skewX» или «&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;skewY&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;» предназначенные для наклона объекта по горизонтали или вертикали, но они возможно вам пригодятся для проектов реализующих псевдо&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;3D.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Например, из трех прямоугольников можно создать куб, как показано на рисунке.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhkdQ4nsg4K-5-aD3ghnu6gkChF2FM_Zg5ORCRX_EchuG30vMp5rmGMezA1xoEMuazi3VTfd_UeFfYcr86vgKcXuq0YB3LXP4tYIPxvEyP_31c4ZYpSWHk7vpuUsduCljB9xzW8rsQur5s/s1600/hummocks.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhkdQ4nsg4K-5-aD3ghnu6gkChF2FM_Zg5ORCRX_EchuG30vMp5rmGMezA1xoEMuazi3VTfd_UeFfYcr86vgKcXuq0YB3LXP4tYIPxvEyP_31c4ZYpSWHk7vpuUsduCljB9xzW8rsQur5s/s320/hummocks.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Для «кочек»&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;я выбрал следующие значения [(3,0,0,3,1000,500), (4,0,0,4,480,410), (6,0,0,6,-150,260)] и получил очередной файл SVG. Да, эта картина грубовата и не сглажена фильтрами и спецэффектами Фотошоп, но я нахожу другой факт более важным - наш SVG весит&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;7&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;,5 кБ, а этот JPEG с размером 400*250 и качеством 60% уже 18 кБ (а если пытаться сохранить в полном кач-ве и с полным разрешением, то вышло бы - 300 кБ). Еще один плюс - SVG сам масштабируется под разрешение экрана и размер рабочей области браузера, а под растр нам пришлось бы придумывать ухищрения.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;И у нас в SVG есть простор для совершенствования, постаравшись мы можем еще уменьшить размер файла, добавив несколько атрибутов изменить стиль линий. Да и визуальные фильтры разработаны W3C, но пока, правда, реализованы не во всех браузерах. Мой любимый Google Chrome в числе передовиков и полностью поддерживает все спецификации консорциума W3C.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;Визуальные фильтры.&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Не углубляясь в подробности сразу показываю код визуального фильтра:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&amp;lt;filter id=&quot;BlurFar&quot;&amp;gt;&amp;lt;feGaussianBlur stdDeviation=&quot;1.5&quot; /&amp;gt;&amp;lt;/filter&amp;gt;
&amp;lt;filter id=&quot;BlurNear&quot;&amp;gt;&amp;lt;feGaussianBlur stdDeviation=&quot;0.5&quot; /&amp;gt;&amp;lt;/filter&amp;gt;
&amp;lt;filter id=&quot;BlurSmall&quot;&amp;gt;&amp;lt;feGaussianBlur stdDeviation=&quot;0.1&quot; /&amp;gt;&amp;lt;/filter&amp;gt;

  &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;g transform=&quot;matrix(3,0,0,3,1000,500)&quot; filter=&quot;url(#BlurFar)&quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;g transform=&quot;matrix(4,0,0,4,480,410)&quot; filter=&quot;url(#BlurNear)&quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;
   &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;path d=&quot;m0,100 q100,-100 200,0z&quot; class=&quot;grass&quot; filter=&quot;url(#BlurSmall)&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;  &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg04s9cIzNe0GtXUQI_snWAYtdAmDGl9ma6ogVA-HLbAQEeAkWdSTghfUDMb82y0pPGbEH09OHVCPTG6EA764Q70gcDyRZHKGPGMbplxEhKhf2S1Sn8oFOthBKmaC6tzerYD9akRRPL9oFZ/s1600/part4_html_m4fea0b13.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg04s9cIzNe0GtXUQI_snWAYtdAmDGl9ma6ogVA-HLbAQEeAkWdSTghfUDMb82y0pPGbEH09OHVCPTG6EA764Q70gcDyRZHKGPGMbplxEhKhf2S1Sn8oFOthBKmaC6tzerYD9akRRPL9oFZ/s1600/part4_html_m4fea0b13.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Вот такие, незначительные, изменения привносят в наш пейзаж немного реалистичности, за счет DOF (&lt;em&gt;от англ. depth of field - на русский переведу, как глубина резкости&lt;/em&gt;). Парный тэг &amp;lt;filter&amp;gt; как и градиенты располагают внутрь контейнера &amp;lt;defs&amp;gt;, и он (в свою очередь) содержит один и более тэгов описывающих фильтры. Я применил тэг &amp;lt;feGaussianBlur&amp;gt; для размытия по Гауссу, а другие фильтры вы без труда отыщите в спецификации. Применять определенный в &quot;defs&quot; фильтр можно и к группам и к отдельным объектам указав им атрибут &quot;filter&quot;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Быстро и просто мы разобрали на практике большую часть современного SVG. Пока что за бортом остались связанные и интегрированные растры, текстовые объекты, шрифты, анимация и использование сценариев. Все это будет рассмотрено в следующих частях статьи.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/6877010917867975452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-4.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/6877010917867975452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/6877010917867975452'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-4.html' title='SVG. Масштабируемая векторная графика. Часть 4'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnaSdmmWuHx7q6ymfprHH9d00LcWmhFO8uK-tyUlmAni90L589ejxL1GO-1z6nOuJEkszPYGHnL9SV8Fzrhleu9wR7wAwDbfqj7xuDfmsUmql7_4yJKwzuS2YUq-EhhD4Pd_Bld76TCml/s72-c/ps.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-8523744652841331536</id><published>2011-10-25T11:36:00.000-07:00</published><updated>2011-10-25T11:36:42.740-07:00</updated><title type='text'>SVG. Масштабируемая векторная графика. Часть 3</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
&lt;div type=&quot;HEADER&quot;&gt;&lt;div lang=&quot;en-US&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large; font-weight: bold;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Область просмотра,&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;клиппирование&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Клиппирование - это обрезка объектов выходящих за рамки области просмотра (любой другой области). Зачем нам это нужно?&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Внутрь тэга&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;&amp;nbsp;&amp;lt;svg&amp;gt; я добавил атрибуты viewBox=&quot;0 0 1440 800&quot; preserveAspectRatio=&quot;xMidYMax slice&quot;. ViewBox ограничивает область просмотра и гарантирует нам, что &quot;горизонт&quot; окажется в одной и той же Y координате на разных браузерах. PreserveAspectRatio срежет лишнее по краям и скроет верх изображения если пропорции экрана не позволят все показать.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXUeyUDo8h3UK3QWyOswMyyRUt7yiuzIwn84dWTMphyqPnJw2gor6yYeZEiO5moJkYi-jvKoXc8TgOTYdiiqhyphenhyphenoUI4h8mNHkFfJMyBJNQxjbVmujZ1Fe3bjGutz734oxV2hhpBtAus8htU/s1600/part3_html_m482809ef.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;120&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXUeyUDo8h3UK3QWyOswMyyRUt7yiuzIwn84dWTMphyqPnJw2gor6yYeZEiO5moJkYi-jvKoXc8TgOTYdiiqhyphenhyphenoUI4h8mNHkFfJMyBJNQxjbVmujZ1Fe3bjGutz734oxV2hhpBtAus8htU/s320/part3_html_m482809ef.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Таким образом, мы ограничили область просмотра нашего пейзажа окном с размерами 1440 на 800 единиц, которые будут пересчитываться в реальные пиксели уже в браузере и если пропорции его окна просмотра не будут соответствовать заявленным нами, то он возьмет нижний край пейзажа, расположит его снизу и срежет верх, либо обрежет боковые края. Обе ситуации станут понятнее если вы посмотрите на картинку.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Еще один важный момент, который должны помнить те, кто планирует писать файлы&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;своими руками (без применения графических редакторов).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Начало координатной плоскости лежит в левом верхнем углу и оси направлены слева-направо и сверху-вниз.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Графические примитивы&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;и их свойства&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Т&lt;/span&gt;еперь давайте снова вернемся к основной цели данной статьи - написание пейзажа для интернет страницы. У нас уже есть структура документа, а точнее схема по которой мы будем добавлять графические примитивы. Мы разобрались как эти примитивы описывать в файле и нам осталось разобраться со свойствами которыми обладают наши примитивы, а также трансформацией объектов и групп размещающей их на холсте в конечном виде.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Начнем со свойств, таких как толщина линии обводки, ее цвет, а так же заливкой, и сразу приведу маленький пример:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;rect width=&quot;1198&quot; height=&quot;398&quot; fill=&quot;none&quot; stroke=&quot;blue&quot; stroke-width=&quot;1&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Тут у нас прямоугольник без заливки, но с бордюром синего цвета в 1 единицу толщиной. Эти свойства указаны в атрибутах тэга, что не всегда удобно. И W3C находит выход - свойства можно описать в парном тэге &amp;lt;style&amp;gt; в манере CSS как это делается в HTML документах и тогда написав:&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;.blueBorder {fill:none; stroke:blue; stroke-width:1}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;мы можем задать те же свойства не только вышеописанному прямоугольнику, но и любому другому примитиву указав атрибут class=&quot;blueBorder&quot; для тэга примитива например:&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;circle cx=&quot;600&quot; cy=&quot;200&quot; r=&quot;100&quot; class=&quot;blueBorder&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Ну что же, теперь мы во всеоружии и можем приступать к написанию нашего пейзажа... Для начала расставим &quot;заглушки&quot; обозначив блоки, которые будем постепенно заполнять:&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&amp;lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&quot;&lt;a href=&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&gt;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&lt;/a&gt;&quot;&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #00ae00;&quot;&gt;&amp;lt;svg version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #cc9900;&quot;&gt;&amp;lt;style type=&quot;text/css&quot;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;/span&gt;
                &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #4c4c4c;&quot;&gt;/* Стили */&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #cc9900;&quot;&gt;]]&amp;gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/span&gt;
          &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #000099;&quot;&gt;&amp;lt;defs&amp;gt;&lt;/span&gt;&lt;/span&gt;
                &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #4c4c4c;&quot;&gt;/* Градиенты */&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #cc9900;&quot;&gt;   &lt;/span&gt;     &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #000099;&quot;&gt;&amp;lt;/defs&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #cc00cc;&quot;&gt;&amp;lt;g&amp;gt;&lt;/span&gt;&lt;/span&gt;
              &lt;span style=&quot;color: #4c4c4c;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #4c4c4c;&quot;&gt;/* Группы и примитивы */&lt;/span&gt;&lt;/span&gt;
      &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&amp;lt;/g&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #cc9900;&quot;&gt; &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #00ae00;&quot;&gt;&amp;lt;/svg&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Тут ненавязчиво появились еще тэги требующие пояснения для новичка. &amp;lt;!DOCTYPE - это еще один из заголовочных обязательных тэгов указывающий на тип документа с которым будет иметь дело браузер его разбирающий. &quot;Ноги&quot; в данном случае растут из древнего SGML, предшественника XML, в котором тип документа описывался файлом .dtd и такой файл для SVG имеется на сервере W3C, в чем мы уверены указывая его в ссылке. Еще один непонятный тэг &amp;lt;![CDATA[ и его пара ]]&amp;gt; ограничивают &quot;неродную&quot; для SVG таблицу стилей написаную в манере CSS, о чем сказано в атрибуте type=&quot;text/css&quot; тэга &amp;lt;style&amp;gt;.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Добавим наш фон (прямоугольник) и получим:&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&amp;gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1//EN&quot;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&quot;&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;svg version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;viewBox=&quot;0 0 1440 800&quot; preserveAspectRatio=&quot;xMidYMax slice&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;g&amp;gt;&lt;/span&gt;
           &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;&amp;lt;rect id=&quot;bg&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;/g&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Красным я выделил то, что добавил, и далее буду писать только те куски кода которые будут добавляться.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;Т&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;еперь вы можете увидеть наш первый результат. Надеюсь он вас вдохновил, а чтение не сильно утомило отбив желание изучать SVG.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Что же у нас дальше по плану? Ах да, &quot;кочки&quot;. И мы приступаем к рисованию обещанной основы из контура состоящего из ДВУХ точек. Почему их всего две спросят некоторые из вас, а потому, что у нашей кривой Безье только начало и конец, а обратно в начало браузер пройдет кратчайшим путем (по прямой). Мы воспользуемся квадратичной кривой, хотя возможно больше подошла бы кубическая (проверим).&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m0,0 q100,-100 200,0z&quot; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Вот, вполне приемлемая кочка. Но она пока что черная и стоит не на своем месте. Зададием ей линию обводки. Получим, к примеру:&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;.grass {stroke:#090; stroke-width:1; &lt;span lang=&quot;en-US&quot;&gt;fill:#0f0;&lt;/span&gt;}&lt;/span&gt;

&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m0,100 q100,-100 200,0z&quot; class=&quot;grass&quot; /&amp;gt;    &lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Нарисуем тропинку. Ее опишет следующий путь - &quot;m50,0 q50,-10 70,-47 0,50 -20,47z&quot; или &quot;m50,0 q10, -50 70,-47 -50,0 -20,47z&quot;, обратите внимание - точки в обоих случаях одни и те же, изменяются только опорные пункты путей (нам нужны оба вида &quot;тропинок&quot;, чтобы отличать первую и вторую &quot;кочки&quot;), а стиль у них будет такой &quot;fill:#cc9; stroke:#990; stroke-width:2&quot; назовем его footPath.&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;.footPath {fill:#cc9; stroke:#990; stroke-width:2}&lt;/span&gt;

&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m50,0 q10,-50 70,-47 -50,0 -20,47z&quot; class=&quot;footPath&quot; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Переходим к цветочкам. Точнее, нарисуем контур одного цветка, а затем создадим несколько трансформированных копий этого цветка. Путь я &quot;выдернул&quot; из оптимизированного SVG сгенерированного в Inkscape - &quot;m0.54688,-0.11829 c-0.37472,-0.43643 -0.25072,1.0885, 0.04856,0.59722, 0.29928,-0.49124 -1.1127,0.09791-0.55298,0.23074, 0.55967,0.13283, -0.43695,-1.0279 -0.39033,-0.45461, 0.046622,0.57333, 0.84261,-0.73321, 0.31175,-0.51171 -0.53086,0.22151, 0.95771,0.57479, 0.583,0.13836z&quot; для свойств используем радиальный градиент&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;(как его сделать вы узнаете в следующей части статьи)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;nbsp;и тонкую серую обводку. «&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;К&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;очка»&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;почти&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;nbsp;готова, но она пока еще не на своем месте,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;как и цветочки, которых хоть и три, но они пока что маленькие и наложены друг на друга&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;.flower {stroke:#ccc; stroke-width:0.01}

&amp;lt;path d=&quot;m0.5468 .. 0.1383z&quot; class=&quot;flower&quot; /&amp;gt;
&amp;lt;path d=&quot;m0.5468 .. 0.1383z&quot; class=&quot;flower&quot; /&amp;gt;
&amp;lt;path d=&quot;m0.5468 .. 0.1383z&quot; class=&quot;flower&quot; /&amp;gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Объединяем элементы описывающие &quot;Кочку&quot; тэгом контейнером &amp;lt;g&amp;gt; в группу, дважды &quot;копипастим&quot; (дублируем) получая таким образом три &quot;Кочки&quot;, как и было задуманно вначале. В первой группе оставляем только цветок&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;в середине&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;, а в средней удаляем первый цветок (их перекр&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;о&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;ют другие объекты, поэтому они лишние). Меняем путь в тропинке средней &quot;Кочки&quot;, а в передней вообще его удаляем. Таким образом мы получаем три группы расположенные одна над другой и нам осталось только указать для каждого тэга &amp;lt;g&amp;gt; атрибут transform=&quot;matrix()&quot;,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;дабы разместить их на холсте с нужным масштабом и в нужных координатах, но об этом речь пойдет в следующей части статьи.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWoWB7rwTWlzKmE0xKSISG3EmWjVGaEAJ-Wz7znrnkxIbPKQkuUH-k1wbHsBTAMf60J9xJtOhJd9gePc8c5WYk02O8ce8rz-LcMXp0X21Tx0n1TYqEBdSeKEziJp_4fLlNuSq7cGcs2yDk/s1600/part3_html_m42fca169.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWoWB7rwTWlzKmE0xKSISG3EmWjVGaEAJ-Wz7znrnkxIbPKQkuUH-k1wbHsBTAMf60J9xJtOhJd9gePc8c5WYk02O8ce8rz-LcMXp0X21Tx0n1TYqEBdSeKEziJp_4fLlNuSq7cGcs2yDk/s1600/part3_html_m42fca169.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&quot;Облака и островок справа&quot;. Три контура: Белое облако с голубой обводкой&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&amp;nbsp;голубое облако без обводки&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;и&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&quot;пролесок&quot; темно-зеленый без обводки объеденены в группу, которая&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;будет&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;перемещена в правую часть горизонта. Здесь вы можете посмотреть на контуры. Затем была создана копия этой группы, чтобы &quot;отразиться&quot; в воде. Этой группе добавлен атрибут opacity (прозрачность).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;pre&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;g&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m..z&quot; fill=&quot;#fff&quot; stroke-width=&quot;1&quot; stroke=&quot;#09f&quot; /&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m..z&quot; fill=&quot;#3cf&quot; /&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m..z&quot; fill=&quot;#060&quot; /&amp;gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;/g&amp;gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;g &lt;span style=&quot;color: #990000;&quot;&gt;opacity=&quot;0.5&lt;/span&gt;&quot;&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m..z&quot; fill=&quot;#fff&quot; stroke-width=&quot;1&quot; stroke=&quot;#09f&quot; /&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m..z&quot; fill=&quot;#3cf&quot; /&amp;gt;&lt;/span&gt;
 &lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;path d=&quot;m..z&quot; fill=&quot;#060&quot; /&amp;gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;/g&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Код приведен не полностью. Немного поразмыслив я не стал придумывать новые контуры для облаков слева, а решил воспользоваться новыми трансформациями для той же группы, что только что была разработана. Пришлось просто убрать контур изображающий &quot;пролесок&quot;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Файл уже весит 7,5 кБ, но мы то помним, что Jpeg с таким разрешением и количеством оттенков весит как минимум в десять раз больше. Остались мелочи: два облачка посреди небосвода и два деревца на двух &quot;кочках&quot;.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUGosKeipbsNLjTAHFwa9L63cWUD2z6_c26H7Kr2bcbv8dXnYqCFr-zkCdBdsf2Nwar7bprYZFwo1TccEJIfQwlMBtYWvAekwRvc-NjxdldREV3D2pqPkGknxLBhWBhw2mfoq4mhK-pB9r/s1600/part3_html_m66aab1d0.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUGosKeipbsNLjTAHFwa9L63cWUD2z6_c26H7Kr2bcbv8dXnYqCFr-zkCdBdsf2Nwar7bprYZFwo1TccEJIfQwlMBtYWvAekwRvc-NjxdldREV3D2pqPkGknxLBhWBhw2mfoq4mhK-pB9r/s1600/part3_html_m66aab1d0.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Сначала деревца.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Здесь&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;можно взглянуть на контуры. Крона сформирована из трех клонов одного и того же контура. Думаю вы уже достаточно попрактиковались и сразу заметили, что применением атрибута opacity для среднего контура кроны мы достигаем эффекта при котором создается впечатление, что контуров больше и используется не 3, а 5 оттенка зеленого.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Первое дерево мы вставляем в группу &quot;левой кочки&quot;. Дерево на второй &quot;кочке&quot; появляется за счет матричной трансформации и на этот раз я кроме масштабирования и переноса буду использовал отражение по вертикали. Добавляем эту группу к средней &quot;кочки&quot; и, само собой разумеется, она получит &quot;в наследство&quot; размытие, которое в литературе принято называть DOF, которое будет реализовано визуальным фильтром рассматриваемым в следующей части статьи.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;Облака посреди небосвода мы&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;с&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;делаем не два, а четыре. Одна пара будет иметь четкий хотя и тонкий контур, а вторая (находящаяся под ней) этого контура лишена, зато&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;будет&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;размыта фильтром. Не стану приводить отдельно контуры этих облаков, а лучше сразу покажу конечный результат&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;к которому мы стремимся&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7qxcfEqLIPgMDiq3MGRkph-RQbshLw6SBlsxADk2Z27MGDJlVCfnKX4VlefNsr0e7paAKHX2AnLN9P3D3t0osAVHPFXiCiceY-gUfdmYd_8MeGbXStDXrQP73Pvn1kNYHdpe45Z0P6i2X/s1600/part3_html_221c1315.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;94&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7qxcfEqLIPgMDiq3MGRkph-RQbshLw6SBlsxADk2Z27MGDJlVCfnKX4VlefNsr0e7paAKHX2AnLN9P3D3t0osAVHPFXiCiceY-gUfdmYd_8MeGbXStDXrQP73Pvn1kNYHdpe45Z0P6i2X/s320/part3_html_221c1315.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/8523744652841331536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/8523744652841331536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/8523744652841331536'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-3.html' title='SVG. Масштабируемая векторная графика. Часть 3'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXUeyUDo8h3UK3QWyOswMyyRUt7yiuzIwn84dWTMphyqPnJw2gor6yYeZEiO5moJkYi-jvKoXc8TgOTYdiiqhyphenhyphenoUI4h8mNHkFfJMyBJNQxjbVmujZ1Fe3bjGutz734oxV2hhpBtAus8htU/s72-c/part3_html_m482809ef.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-4420245443487525365</id><published>2011-10-25T11:03:00.000-07:00</published><updated>2011-10-25T11:03:04.931-07:00</updated><title type='text'>SVG. Масштабируемая векторная графика. Часть 2</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;div type=&quot;HEADER&quot;&gt;&lt;div lang=&quot;en-US&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 32px; font-weight: bold;&quot;&gt;Пишем файл&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;своими руками.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;В прошлой части статьи мы уже выяснили, что файлы&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;текстовые, а стало быть фраза «написать пейзаж» приобрела второй, более привычный простому обывателю смысл.&amp;nbsp;&lt;/span&gt;Итак минимальная заготовка файла SVG включает в себя следующий код:&lt;/div&gt;&lt;dl&gt;&lt;dd&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&amp;gt;&lt;/span&gt;&lt;/dd&gt;&lt;dd&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot;&amp;gt;&lt;/span&gt;&lt;/dd&gt;&lt;dd&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;!-- Content --&amp;gt;&lt;/span&gt;&lt;/dd&gt;&lt;dd&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;;&quot;&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Здесь в первой строке стандартный для всех файлов семейства XML пролог (лат.: - вступление). Ведь для вас не секрет, что файлы SVG из этого семейства. Во второй строке парный тэг &amp;lt;svg&amp;gt; ограничивающий тело документа и это для вас очевидный факт, ведь в последней строке вы видите его &quot;хвост&quot; - закрывающий тэг &amp;lt;/svg&amp;gt;. Надеюсь, что стандартный комментарий (в третьей строке) указывающий куда мы будем писать дальше, тоже никого не напугал. Тем же, для кого все вышесказанное - &quot;темный лес&quot;, а желание освоить материал все-таки присутствует рекомендую отыскать на просторах интернета толковый учебник по XML 1.0&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;С теми, кто все еще в строю, едем дальше... Разработаем схему нашего рисунка, а для начала найдем себе референсы в сети, либо нарисуем от руки, то что хотим увидеть в итоге. Я применил оба подхода и накопав кучу малоприемлемых картинок нарисовал (по аналогии с одним из понравившихся) свой:&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLjBZulsa15BkMpLktEp4zK11spoKucck_oIrjdZtgixuO_0-d5NU-moiBuq4ygvDRaEOh5E22ooY6Oci7U-5gaafQJsTOrjk_DenZ7LR2bPJD7gTnx7VJ_ptzGTEvcBVU9L2DhY_Nl4kQ/s1600/part2_html_m626e644b.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLjBZulsa15BkMpLktEp4zK11spoKucck_oIrjdZtgixuO_0-d5NU-moiBuq4ygvDRaEOh5E22ooY6Oci7U-5gaafQJsTOrjk_DenZ7LR2bPJD7gTnx7VJ_ptzGTEvcBVU9L2DhY_Nl4kQ/s320/part2_html_m626e644b.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Вот так, наскоро набросав ручкой на листке, отсканировав и разукрасив в Фотошопе я получил растровый эскиз будущего векторного рисунка.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Начнем со схемы документа и структура SVG файла &quot;нам в помощь&quot;. Ведь то, что находится на заднем плане должно идти вначале, а то, что будет указано в файле в последнюю очередь отобразиться на рисунке в верхнем (наружном) слое, т.е. на переднем плане. И не будем забывать об оптимизации кода, о его минимализации. Итак, подложкой на нашей картине станет прямоугольник закрашенный сложным градиентом, где в верхней части мы переходим от темно-синего к светло-синему, а ниже от белого к темно-синему изображая, таким образом, небо и воду (еще не решил что это - море или озеро) эффектно выделив горизонт. Затем у нас будут идти три сгруппированных объекта, которые мы назовем &quot;кочки&quot; или &quot;островки&quot;, кому как больше понравиться. Почему мы говорим о группах? Да просто, так мы нарисовав один сложный (составной) объект можем скопировав его и слегка трансформировав получить новый. Таким образом, сначала рисуется правая (на рисунке) &quot;кочка&quot;, затем она увеличивается и переносится немного влево, затем сделаем еще одну копию и повторим увеличение и перенос.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Два деревца на двух передних &quot;кочках&quot; это тоже клоны для которых применена трансформация &quot;масштаб+перенос&quot;. Облака отражающиеся в воде, это тоже пары, где клон имеет масштаб равный &quot;&amp;nbsp;1&quot; по оси Y и &quot;+1&quot; по оси Х, что приводит к отражению Y координат относительно оси Х (эффект &quot;зеркала&quot;). То же касается и пролеска, который виден вдали (может это островок, а может противоположный берег залива, решайте сами). Ну и в последнюю очередь идут облака которые мирно висят посреди нашего неба и не имеют отражений.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Теперь &quot;копнем поглубже&quot; и поговорим о группах - сложных объектах состоящих из нескольких контуров. На моей картинке я вижу таких несколько: это &quot;кочки&quot; о которых мы уже говорили, а так же отражающиеся облака и деревья. С облаками все просто, тут по два контура, где на заднем плане (напоминаю, что в файле он будет идти впереди/вначале) контур с белым фоном, ближе контур залитый голубой краской. Чуть больше работы предстоит с деревьями, ведь тут у нас крона из трех контуров с разными оттенками зеленого, но вперед мы изобразим ствол дерева в виде контура залитого коричневой краской (простите, забыл покрасить в Фотошопе) и тогда крона идущая в файле следом за ним накроет его на картине. И наконец, &quot;высший пилотаж&quot;, наши &quot;островки-кочки&quot;... Здесь залитая градиентом от темно-зеленого к светлому основа представленная контуром ограниченному ДВУМЯ точками, но об этом позже. На первом и втором клоне добавлены тропинки, чтобы картинка не получилась совсем уж скучной пав жертвой моего желания оптимизировать/минимизировать. И цветочки повсюду, что может быть чудесней, один контур и градиент по схеме красный-красный-белый-белый, т.е. нам не нужно рисовать серединку и лепестки отдельно, а выделить этот факт цветом. К тому же сделав несколько вариантов градиента для цветов мы сможем сделать красивые и пестрые газончики.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Ну вот, первый этап нами уже пройден и мы можем начертить схему документа, который будем писать на SVG. Формат&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;являясь членом семейства XML наследует от него важный признак - древовидную структуру, которую мы и отображаем в нашей схеме:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP8FzThYs3n9oCLmzh-GjowJR3Ol_rjUNUuVayI9CLs62z3-WUkTv5u37b1I48Qkyi7q-OStfjkVwgjYbMk9cVElEtusFwv9KiWt18UlBSp2YsHJqXOFLHsMIAclRzUpBtzexYCB6RupBL/s1600/part2_html_2111db3b.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP8FzThYs3n9oCLmzh-GjowJR3Ol_rjUNUuVayI9CLs62z3-WUkTv5u37b1I48Qkyi7q-OStfjkVwgjYbMk9cVElEtusFwv9KiWt18UlBSp2YsHJqXOFLHsMIAclRzUpBtzexYCB6RupBL/s320/part2_html_2111db3b.jpg&quot; width=&quot;248&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Файл который мы напишем лишь слегка отличается, дополняя ее нюансами реализации.&lt;br /&gt;
&lt;div align=&quot;JUSTIFY&quot;&gt;В своем проекте мы будем использовать только два графических примитива - это прямоугольник и контур, но для &quot;общего развития&quot; сообщу, что в спецификации SVG описаны еще несколько, это: круг, овал, линия, полилиния и полигон (многоугольник), и еще (чуть не забыл) текст.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Начнем вникать в тонкости описания примитивов. С прямоугольником, который представлен тэгом &amp;lt;rect /&amp;gt;, что вполне естественно, никаких сложностей быть не может. Тут среди прочих нам важны четыре атрибута, два на позицию (положение на холсте - Х и Y) и два на размер (ширина и высота). Гораздо сложнее примитив &quot;контур&quot; - тэг &amp;lt;path /&amp;gt; у которого есть атрибут под названием &quot;d&quot; (от англ. data - данные) - это и есть собственно путь по которому пойдет перо рисуя наш контур. Давайте подробнее разбираться, ведь в спецификации этой теме&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;посвящен&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;а&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;вся восьмая глава&lt;/span&gt;...&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Итак, про атрибут &quot;d&quot; в спецификации сказано, что он - &quot;определяет контур фигуры&quot;. Осталось выяснить как он это делает. Читаем спецификацию дальше и находим вот что: &quot;атрибут ´d´ содержит инструкции для перемещения, рисования линии, дуги, кривой Безье (и квадратичной и кубической), а также закрытия (замыкания).&quot;. Эти инструкции (команды) записываются латинскими буквами и ниже я привожу таблицу с их определением:&lt;/div&gt;&lt;table cellpadding=&quot;5&quot; cellspacing=&quot;3&quot; style=&quot;width: 643px;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;92&quot;&gt;&lt;/col&gt;&lt;col width=&quot;359&quot;&gt;&lt;/col&gt;&lt;col width=&quot;148&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: rgb(128, 128, 128); border-top-style: double; border-top-width: 2.6pt; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0.13cm;&quot; width=&quot;92&quot;&gt;M или m (x, y)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: rgb(128, 128, 128); border-top-style: double; border-top-width: 2.6pt; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0.13cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Начинает новый подконтур в заданных (x, y) координатах. М. (прописная буква) указывает, что далее следуют абсолютные координаты; м. (строчная) указывает, что координаты относительные. Если эта команда сопровождается многократными парами координат, следующие пары это неявные команды рисования линий (L / l). Следовательно, неявные команды будут относительны, если команда перемещения пера относительна, и абсолютны, в противном случае. Если (m) появляется как первый элемент контура, то эту команду принимают как (М) с парой абсолютных координат, но в этом случае, все последующие пары координат считаются относительными несмотря на то, что начальная команда интерпретируется как перенос пера в абсолютной системе координат.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: rgb(128, 128, 128); border-top-style: double; border-top-width: 2.6pt; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0.13cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjokYtPsaa5WCThFtdQ0mn_bSTNj7_c2ylNFWsOft1Q62Wd3DfZKOwky3ddTeoK6nJZorj79YG5O1Bocf6ZVm8K0hyjGE7zY85N7t64F4rrEuLxvyLOPrSxOk4dRUNifrA2g4i3nq_nbSY9/s1600/part2_html_18e86933.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjokYtPsaa5WCThFtdQ0mn_bSTNj7_c2ylNFWsOft1Q62Wd3DfZKOwky3ddTeoK6nJZorj79YG5O1Bocf6ZVm8K0hyjGE7zY85N7t64F4rrEuLxvyLOPrSxOk4dRUNifrA2g4i3nq_nbSY9/s320/part2_html_18e86933.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;Z или z без параметров&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Закрывает текущий контур, рисуя прямую линию от текущей точки до начальной точки текущего подконтура. Так как Z и z не берут никакие параметры, они имеют идентичный эффект.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgueYtH8-xLErjTMQ9MQ9nEUHo5ukteXLggDp_JNn3I-oGRcGftdr_0PYrqRuS0k9wZRjIU9zBQJKMlN9YIrpfuToO1JLuVwwpmZoizNSJ_R90oO0VtaB79wwKFxIwFfYHpAhq3-thvTkBn/s1600/part2_html_78d5c85c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgueYtH8-xLErjTMQ9MQ9nEUHo5ukteXLggDp_JNn3I-oGRcGftdr_0PYrqRuS0k9wZRjIU9zBQJKMlN9YIrpfuToO1JLuVwwpmZoizNSJ_R90oO0VtaB79wwKFxIwFfYHpAhq3-thvTkBn/s320/part2_html_78d5c85c.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;L или l (x, y)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует линию от текущей точки до заданной (x, y) координатами, которые становятся новой текущей точкой. L (прописная буква) указывает, что далее следуют абсолютные координаты; l (строчная) указывает, что будут следовать относительные координаты. Множество пар координат может быть определено, чтобы рисовать «ломаную» линию. В конце команды, новая текущая точка устанавливается на заключительный набор координат.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYdEW4nCePnfQQEip2ZZRhRCL3p0lCQ-mAJiV9Kb66QYdYzgeHG_sH6U65Lg63nWVRkFj3H6nvPx-GR3FOrB11VIkYk2ZR73KLoqz-wgvyuV1XD2KN2JizbaxUo462oTpsAdE82KV5aRdx/s1600/part2_html_m7f4f87cf.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYdEW4nCePnfQQEip2ZZRhRCL3p0lCQ-mAJiV9Kb66QYdYzgeHG_sH6U65Lg63nWVRkFj3H6nvPx-GR3FOrB11VIkYk2ZR73KLoqz-wgvyuV1XD2KN2JizbaxUo462oTpsAdE82KV5aRdx/s320/part2_html_m7f4f87cf.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;H или h (x)&lt;/dt&gt;
&lt;dt&gt;&lt;br /&gt;
&lt;/dt&gt;
&lt;/dl&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует горизонтальную линию от текущей точки (cpx, cpy) к (x, cpy). H (прописная буква) указывает, что будут следовать абсолютные координаты; h (строчная) указывает, что будут следовать относительные координаты. &quot;x&quot; можно указать многократно (хотя обычно это не имеет смысла). В конце команды, новой текущей точкой становится (x, cpy) в последнем x.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid3M-e-febJtsGfIp3rm_650Sn0DUvo4VxqNff9czZ32EA6FZ-7WVJI5LirnBiARJmOVuAJQKEwbsXuqtjbN9J9dUes4Q0NFnclydvAmP1bSpRI6UTXfa_QJRXTcA_o7hDHshnUYuySMwW/s1600/part2_html_7122a144.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid3M-e-febJtsGfIp3rm_650Sn0DUvo4VxqNff9czZ32EA6FZ-7WVJI5LirnBiARJmOVuAJQKEwbsXuqtjbN9J9dUes4Q0NFnclydvAmP1bSpRI6UTXfa_QJRXTcA_o7hDHshnUYuySMwW/s320/part2_html_7122a144.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;V или v (x)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует вертикальную линию от текущей точки (cpx, cpy) к (срx, y). V (прописная буква) указывает, что будут следовать абсолютные координаты; v (строчная) указывает, что будут следовать относительные координаты. &quot;x&quot; можно указать многократно (хотя обычно это не имеет смысла). В конце команды, новой текущей точкой становится (cpx, y) в последнем y.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEvvG_9pZK5Zp4Pkpazc6-YhAVjqdI11eEDaAwQieuuVfwxQOyggPIVwuGSgIFNBE9LCNKdPD-rQvcy94l6qBvyH8BGtke_4FoxExX6YtrqTZuFH-WwWVoxmExnq9VCBOKzYAGJgBY4jY7/s1600/part2_html_3bdd7122.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEvvG_9pZK5Zp4Pkpazc6-YhAVjqdI11eEDaAwQieuuVfwxQOyggPIVwuGSgIFNBE9LCNKdPD-rQvcy94l6qBvyH8BGtke_4FoxExX6YtrqTZuFH-WwWVoxmExnq9VCBOKzYAGJgBY4jY7/s320/part2_html_3bdd7122.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;C или с (x1, y1, x2, y2, x, y)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует кубическую кривую Безье от текущей точки до (x, y) используя (x1, y1) как контрольный пункт в начале кривой и (x2, y2) как контрольный пункт в конце кривой. C (прописная буква) указывает, что абсолютные координаты будут следовать; c (строчная) указывает, что относительные координаты будут следовать. Могут быть определены многократные наборы координат, чтобы рисовать полилинию Безье. В конце команды, новой текущей точкой становится последняя (x, y) пара координат, используемая в полилинии Безье.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpDIXKDl9sXC2sjpc8rnFVBSjTV9IaLORuhKD7LjGB5mPjQdrQJL7GuAR97cFAfPeqG_VY5ufcPBjU8mZ54GIsaMG2fdAFwCRmgOogyBg95E0J3Gyse4zEMA3cElBaAqnd9yDiLi0sGV3T/s1600/part2_html_63cc07c8.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpDIXKDl9sXC2sjpc8rnFVBSjTV9IaLORuhKD7LjGB5mPjQdrQJL7GuAR97cFAfPeqG_VY5ufcPBjU8mZ54GIsaMG2fdAFwCRmgOogyBg95E0J3Gyse4zEMA3cElBaAqnd9yDiLi0sGV3T/s320/part2_html_63cc07c8.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;S или s (x2, y2, x, y)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует кубическую кривую Безье от текущей точки до (x, y). Первым контрольным пунктом (вначале кривой) считается отражение второго контрольного пункта на предыдущей команде относительно текущей точки. (Если нет никакой предыдущей команды или если предыдущая команда не была C, c, S или s, считается, что первый контрольный пункт совпадает с текущей точкой.) (x2, y2) - второй контрольный пункт (то есть, контрольный пункт в конце кривой). S (прописная буква) указывает, что абсолютные координаты будут следовать; s (строчная) указывает, что относительные координаты будут следовать. Многократные наборы координат могут быть определены, чтобы рисовать полилинию Безье. В конце команды, новой текущей точкой становится последняя (x, y) пара координат, используемая в полилинии Безье.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhetA3WnZ1f1bcUQtp-kP-e4My6OM_PFm8MvlypnlH5pBIuiugHiOTwoKYaKQyeFIlyiw_2X8I-mduALEBOwZYL4aJ2NsNhaNnN0UbhUsPwRvtir7vKitWwYE4znMb62Q0WsetQhSSCGuUt/s1600/part2_html_33746572.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhetA3WnZ1f1bcUQtp-kP-e4My6OM_PFm8MvlypnlH5pBIuiugHiOTwoKYaKQyeFIlyiw_2X8I-mduALEBOwZYL4aJ2NsNhaNnN0UbhUsPwRvtir7vKitWwYE4znMb62Q0WsetQhSSCGuUt/s320/part2_html_33746572.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;&lt;br /&gt;
&lt;dl&gt;&lt;dt&gt;Q или q (x1, y1, x, y)&lt;/dt&gt;
&lt;dt&gt;&lt;br /&gt;
&lt;/dt&gt;
&lt;/dl&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует квадратичную кривую Безье от текущей точки до (x, y) используя (x1, y1) как контрольный пункт. Q (прописная буква) указывает, что абсолютные координаты будут следовать; q (строчная) указывает, что относительные координаты будут следовать. Многократные наборы координат могут быть определены, чтобы рисовать полилинию Безье. В конце команды, новой текущей точкой становится последняя (x, y) пара координат, используемая в полилинии Безье.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW_JeBdfCqFyjZfC_CI3rN_pmjSnez33ejnaAFKJWWM4M6VAoA0VcsD0KK7YEBoV_SQV3O63yEOnFPIWyKJrOzts0X3b8ma2nfltP_O_ArpxzV5KO6iI_nC6JC-H8zbKWQzDnm_FP_X1RM/s1600/part2_html_m77fb8833.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW_JeBdfCqFyjZfC_CI3rN_pmjSnez33ejnaAFKJWWM4M6VAoA0VcsD0KK7YEBoV_SQV3O63yEOnFPIWyKJrOzts0X3b8ma2nfltP_O_ArpxzV5KO6iI_nC6JC-H8zbKWQzDnm_FP_X1RM/s320/part2_html_m77fb8833.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;T или t (x, y)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует квадратичную кривую Безье от текущей точки до (x, y). Контрольный пункт принят, чтобы быть отражением контрольного пункта на предыдущей команде относительно текущей точки. (Если нет никакой предыдущей команды или если предыдущая команда не была Q, q, T или t, предполагется, что контрольный пункт совпадает с текущей точкой.) T (прописная буква) указывает, что абсолютные координаты будут следовать; t (строчная) указывает, что относительные координаты будут следовать. В конце команды, новой текущей точкой становится последняя (x, y) пара координат, используемая в полилинии Безье.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGlLtuebCtsXhtsraUDjG4oyg0npOUZ7IWE2QaKOIZGZVFnsGYkBFxAlPce0gdULoI54jhcUIvg1gnf_feopivzkaFlJeUwlBiDkjPWz-diBLdAqtx3E0LqNyjxW46qz1qGT6rSdUtshhd/s1600/part2_html_79729c25.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGlLtuebCtsXhtsraUDjG4oyg0npOUZ7IWE2QaKOIZGZVFnsGYkBFxAlPce0gdULoI54jhcUIvg1gnf_feopivzkaFlJeUwlBiDkjPWz-diBLdAqtx3E0LqNyjxW46qz1qGT6rSdUtshhd/s320/part2_html_79729c25.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;92&quot;&gt;A или а (rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y)&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: initial; border-right-style: none; border-right-width: initial; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0cm; padding-top: 0cm;&quot; width=&quot;359&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Рисует краткую дугу от текущей точки до (x, y). Размер и ориентация эллипса определяют два радиуса (rx, ry) и угол x-axis-rotation, который указывает, как эллипс в целом вращается относительно текущей системы координаты. Центр (cx, cy) эллипса рассчитан автоматически, чтобы удовлетворить ограничениям, наложенным другими параметрами. large-arc-flag и sweep-flag вносят вклад в автоматические вычисления, и помогают определить, как дуга оттянута.&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(128, 128, 128); border-bottom-style: double; border-bottom-width: 2.6pt; border-left-color: rgb(128, 128, 128); border-left-style: double; border-left-width: 2.6pt; border-right-color: rgb(128, 128, 128); border-right-style: double; border-right-width: 2.6pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0.13cm; padding-left: 0.13cm; padding-right: 0.13cm; padding-top: 0cm;&quot; width=&quot;148&quot;&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-9Xd0G1keiE-6WRIk-QmzxmXtZ84e8CYVBXpoEdjuqJKJG0bROm6-APw71hWttzBejNEZ9TuxE-vQYil0mlL0c-1-l9fbU_N2j1Wj8YeD2zWpvny8Q82wBD5ylndSDXl3TAR1qQ10LkTm/s1600/part2_html_m5162c080.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-9Xd0G1keiE-6WRIk-QmzxmXtZ84e8CYVBXpoEdjuqJKJG0bROm6-APw71hWttzBejNEZ9TuxE-vQYil0mlL0c-1-l9fbU_N2j1Wj8YeD2zWpvny8Q82wBD5ylndSDXl3TAR1qQ10LkTm/s320/part2_html_m5162c080.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;У нас готово почти все чтобы начать писать файл с нашим пейзажем, а пока &quot;лирическое отступление&quot;...&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi6iKKB13Lov96cuUl3tLG2YA2JjMoDxOWiw2WdAwZ0oPN9aeASJeI1gnfpk0JoCXtC9sBB1EcygNrP_indpfGaKrvZQXf932VymaNoW36Ng-CdT6j2fQQ9wjG2uu8-DHYuGSKnz8gpEw-/s1600/part2_html_4515e6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi6iKKB13Lov96cuUl3tLG2YA2JjMoDxOWiw2WdAwZ0oPN9aeASJeI1gnfpk0JoCXtC9sBB1EcygNrP_indpfGaKrvZQXf932VymaNoW36Ng-CdT6j2fQQ9wjG2uu8-DHYuGSKnz8gpEw-/s1600/part2_html_4515e6.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Перед началом самостоятельной работы с SVG я рекомендую почитать файлы сгенерированые графическими редакторами. Ничего (к сожалению) не могу сказать о Adobe Illustrator&#39;e, потому что им я никогда не пользовался. Знаю Corel Draw экспортирует, но он является продуктом коммерческим и не каждый осилит его приобретение только для того, чтобы поэкспериментировать с экспортом в SVG. Я рекомендую скачать редактор векторной графики Inkscape с одноименного сайта&amp;nbsp;&lt;a href=&quot;http://www.inkscape.org/&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;http://www.&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.inkscape.org/&quot;&gt;inkscape.org&lt;/a&gt;. Этот редактор распространяется бесплатно, и что самое главное, SVG его родной формат. Сохраняйте файлы в режиме &quot;Оптимизированный SVG&quot; и открывайте их &quot;Блокнотом&quot; (любым текстовым редактором). В режиме оптимизации мы видим минимум &quot;мусора&quot; в коде файла и если вам лень &quot;просчитывать&quot; ваши рисунки можете использовать Inkscape как основной инструмент для создания SVG файлов.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;В следующей части статьи мы просчитаем контуры наших объектов, научимся их трансформировать и размещать на холсте, затем приступим к заполнению нашего файла-болванки.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/4420245443487525365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/4420245443487525365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/4420245443487525365'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-2.html' title='SVG. Масштабируемая векторная графика. Часть 2'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLjBZulsa15BkMpLktEp4zK11spoKucck_oIrjdZtgixuO_0-d5NU-moiBuq4ygvDRaEOh5E22ooY6Oci7U-5gaafQJsTOrjk_DenZ7LR2bPJD7gTnx7VJ_ptzGTEvcBVU9L2DhY_Nl4kQ/s72-c/part2_html_m626e644b.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-245771492090372013</id><published>2011-10-25T10:44:00.000-07:00</published><updated>2011-10-25T10:44:47.294-07:00</updated><title type='text'>SVG. Масштабируемая векторная графика. Часть 1</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 32px; font-weight: bold;&quot;&gt;CG.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div align=&quot;JUSTIFY&quot;&gt;Компьютерная графика&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;(CG&amp;nbsp;&lt;/span&gt;от англ.&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&lt;u&gt;C&lt;/u&gt;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;omputer&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&lt;u&gt;G&lt;/u&gt;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;raphics)&lt;/span&gt;, в привычном на сегодняшний день понимании, развивается с момента появления первых графических операционных систем. И начиная с первых их реализаций она разделилась на два основных направления: графика растровая и векторная. Для этих направлений разработано и применяется великое множество форматов файлов, редакторов и просмотровщиков. Для того, чтобы понять в чем основное отличие растровой и векторной картинки давайте посмотрим на пример показанный ниже.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiocooabwvZ_cVOzupNmVS8bvf42-P_mm9JNScyIKuqUKSJ9XnX_FynGDGivbPtNgLGRYIUSEbukWtcpQgc3N-_g70eSq8Gl31pMYW3hv5kdenJo4L-D_jvNNPDAcSczEr4_RlvyIPCHtr5/s1600/part1_html_m784d640c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;114&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiocooabwvZ_cVOzupNmVS8bvf42-P_mm9JNScyIKuqUKSJ9XnX_FynGDGivbPtNgLGRYIUSEbukWtcpQgc3N-_g70eSq8Gl31pMYW3hv5kdenJo4L-D_jvNNPDAcSczEr4_RlvyIPCHtr5/s320/part1_html_m784d640c.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;br clear=&quot;LEFT&quot; /&gt;Здесь мы видим смайлик, который при масштабе 1х1 будет выглядеть одинаково и для растровой и для векторной графики. Различия проявляются при масштабировании. При увеличении в десять раз мы на растровой картинке, которая показана в центре видим, что точки превратились в квадратики, а на векторной картинке (справа) край области изображающей глаз смайлика остался гладким.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Так будет всегда и это справедливо для любых типов файлов. Для примера отмечу, что&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;BMP, JPEG, PNG&amp;nbsp;&lt;/span&gt;относятся к растровым, а&lt;span lang=&quot;en-US&quot;&gt;&amp;nbsp;EMF, AI, CDR&amp;nbsp;&lt;/span&gt;к векторным. И если опуститься до уровня кода этих файлов, то можно говорить о том, что файлы растровой графики содержат информацию о цвете пикселей (точек) располагающихся в виде прямоугольной матрицы, а файлы графики векторной информацию об объектах картины, которыми могут быть простые фигуры, как прямоугольник, круг, овал, и т.п., а так же их свойствах (размер, положение, цвет обводки и заливки).&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;В данной статье речь пойдет о&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;(от англ. -&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;&lt;u&gt;S&lt;/u&gt;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;calable&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&lt;u&gt;V&lt;/u&gt;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;ector&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&lt;u&gt;G&lt;/u&gt;&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;raphics)&amp;nbsp;&lt;/span&gt;масштабируемой векторной графике предназначенной для сети Интернет.&lt;/div&gt;&lt;h1&gt;Интернет.&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Возможно не всем известно, но глобальная сеть и связанные с ней технологии не живут сами по себе, а развиваются под чутким надзором организации под названием&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;World Wide Web Consortium&lt;/span&gt;(сокр.&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;W3C).&amp;nbsp;&lt;/span&gt;Эта организация, далее консорциум, состоит из представителей крупнейших фирм имеющих отношение к компьютерной индустрии. Представители таких фирм как&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;IBM, Canon, Adobe&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;, Opera, Google&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;&amp;nbsp;&lt;/span&gt;и т.д.&lt;span lang=&quot;en-US&quot;&gt;&amp;nbsp;&lt;/span&gt;собираются вместе и объединяются в рабочие группы, чтобы определить каким Интернет будет завтра.&lt;/div&gt;&lt;dl&gt;&lt;dl&gt;&lt;dl&gt;&lt;dd&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinjpxuSMMX600KZrBC7VyZcj5_pNU-8tlw6RFDLyNDzvz-jE3BmT78QL4ncc6GFZ4_hKtKtZBjXHIycQUvfa_oXo9b3ti8glZQsotVlCm_rjWmBfNNJWe6rU0xmc5PhlyVbLLeFRa-HGdc/s1600/part1_html_95fb38e.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinjpxuSMMX600KZrBC7VyZcj5_pNU-8tlw6RFDLyNDzvz-jE3BmT78QL4ncc6GFZ4_hKtKtZBjXHIycQUvfa_oXo9b3ti8glZQsotVlCm_rjWmBfNNJWe6rU0xmc5PhlyVbLLeFRa-HGdc/s1600/part1_html_95fb38e.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Результаты своей деятельности представители консорциума выкладывают в сети по адресу&amp;nbsp;&lt;a href=&quot;http://www.w3.org/&quot;&gt;http://www.w3.org&lt;/a&gt;&lt;span lang=&quot;en-US&quot;&gt;&amp;nbsp;&lt;/span&gt;и там вы всегда можете просмотреть документы на которые обязаны опираться разработчики программного обеспечения, например, браузеров.&lt;/div&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/dl&gt;&lt;/dl&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtgdMQq8KPiBqa1yFGwWVjBlYvXu5A_77bNtel2yNCx7TX4i-wyec5vkaCWmQSYjZsWg2IpltvLvKqEV2kqsxKlO4sWtA1P-h8f5qs9b7dyjx7lvxqXJgiI9WcFGQvGANnQL1t3SoHzdgt/s1600/part1_html_m621a959.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtgdMQq8KPiBqa1yFGwWVjBlYvXu5A_77bNtel2yNCx7TX4i-wyec5vkaCWmQSYjZsWg2IpltvLvKqEV2kqsxKlO4sWtA1P-h8f5qs9b7dyjx7lvxqXJgiI9WcFGQvGANnQL1t3SoHzdgt/s1600/part1_html_m621a959.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Одна из рабочих групп консорциума занимается разработкой спецификаций&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG.&amp;nbsp;&lt;/span&gt;Сформировалась эта группа в теперь уже далеком 1998 году. Возглавил ее Джон Феррайола (более подробную информацию о котором можно найти на страничке&amp;nbsp;&lt;a href=&quot;http://jonferraiolo.sys-con.com/&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;http://jonferraiolo.sys-con.com&lt;/span&gt;&lt;/a&gt;), тогда представитель от&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Adobe,&amp;nbsp;&lt;/span&gt;а ныне член команды&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;IBM. 29&amp;nbsp;&lt;/span&gt;октября 98 года он опубликовал требования к формату&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;и рабочая группа преступила к разработкам.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYIKntG2Ckjg9pdfPn6Xx8wPz26WTiTdRSAdw7kd0bYRCETBzyh7q_iv_99zd3ijOKJJTUpNxCZ-MmCu-rbKXCbGQXU-TRszkv6kv68uUje3T_yUEu2etVFgpDoBHnSwllzArapFZLIQ21/s1600/part1_html_6b618646.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYIKntG2Ckjg9pdfPn6Xx8wPz26WTiTdRSAdw7kd0bYRCETBzyh7q_iv_99zd3ijOKJJTUpNxCZ-MmCu-rbKXCbGQXU-TRszkv6kv68uUje3T_yUEu2etVFgpDoBHnSwllzArapFZLIQ21/s1600/part1_html_6b618646.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;В составе группы опубликовавшей 11 февраля 1999 года первый черновик спецификации были: по два представителя от&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Microsoft, IBM, Netscape, Adobe, Corel&amp;nbsp;&lt;/span&gt;и по одному от&lt;span lang=&quot;en-US&quot;&gt;Autodesc, SUN, Apple, Xerox, Visio, HP, Macromedia, Quark,CCLRC, Inso;&amp;nbsp;&lt;/span&gt;всего 20 человек. С тех пор состав рабочей группы конечно же несколько раз менялся, но работы велись непрерывно и о своей деятельности команда регулярно отчитывалась как на сайте консорциума, так и в Твиттере под ником&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;@svgwg.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;4&amp;nbsp;&lt;/span&gt;сенября 2001 года была опубликована первая спецификация -&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG 1.0,&amp;nbsp;&lt;/span&gt;что дало возможность авторам&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;(cg–&lt;/span&gt;художникам) быть уверенными в том, что результат их творчества будет одинаково передаваться конечному потребителю браузерами и редакторами.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Потом публиковались различные рекомендации, были сформированы требования для передачи формата&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;мобильными устройствами, особенности применения с нестандартными кодировками и т.&amp;nbsp;п.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;И наконец 16 августа 2011 года вышла вторая редакция спецификации —&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG 1.1&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;Отличия&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;от других векторных форматов&lt;/span&gt;&lt;span lang=&quot;en-US&quot;&gt;.&lt;/span&gt;&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Забегая вперед, заглянем внутрь файла&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG.&amp;nbsp;&lt;/span&gt;Нам сразу становится ясно, что это обычный текстовый файл и объекты описаны в нем языком, который и определен спецификацией&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;W3C,&amp;nbsp;&lt;/span&gt;чего нельзя сказать, к примеру, о файлах&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;EMF.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZVLuYA4cGv3qJGS50GI_ImFapbg1cWoNXeaoG5LnRfueEFVnHJ0941zVAPO8iMxg392RKF2EiAzVB5MUCdW8Xo3Pd8X4avz0nP0MyCUH-NJ7ZLgD5FqI6e_RDpYsMHShIjZlPn2jBYCBO/s1600/part1_html_4cf34b3e.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;285&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZVLuYA4cGv3qJGS50GI_ImFapbg1cWoNXeaoG5LnRfueEFVnHJ0941zVAPO8iMxg392RKF2EiAzVB5MUCdW8Xo3Pd8X4avz0nP0MyCUH-NJ7ZLgD5FqI6e_RDpYsMHShIjZlPn2jBYCBO/s320/part1_html_4cf34b3e.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;&lt;span lang=&quot;en-US&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Векторная графика&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;легко правится любым текстовым редактором и нет необходимости прибегать к помощи графического редактора. Напротив файлы других форматов для редактирования требуют применения, тех или иных программных средств, большая часть из которых являются платными.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Более того, формат&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;относится к категории открытых и это означает, что мы всегда сможем узнать о том, как он устроен, чего нельзя сказать о фирменных форматах&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;AI (Adobe)&amp;nbsp;&lt;/span&gt;и&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;CDR(Corel),&amp;nbsp;&lt;/span&gt;которые разрабатываются производителями графических редакторов. И это еще один плюс рассматриваемого формата, но есть у него и минусы, о которых мы поговорим далее...&lt;/div&gt;&lt;h1&gt;Минусы формата&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG.&lt;/span&gt;&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Формат&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;задумывался, кроме всего прочего, и для экономии трафика в сети Интернет. Всегда ли такая экономия имеет место? Я отвечу — Нет. Дело в том, что для изображений маленьких размеров гораздо выгоднее применять растровую графику (к примеру&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;PNG&lt;/span&gt;).&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Кроме того, есть у&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;и проблемы с интеграцией на&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;web&amp;nbsp;&lt;/span&gt;страницах. Несмотря на то, что&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Microsoft&amp;nbsp;&lt;/span&gt;входит в состав рабочей группы&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;полноценная поддержка формата браузером&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Internet Explorer&amp;nbsp;&lt;/span&gt;не обеспечена до сих пор, а частичная начинается только с, последней на сегодняшний день, девятой версии этого браузера. Версии&lt;span lang=&quot;en-US&quot;&gt;IE&amp;nbsp;&lt;/span&gt;ниже девятой отображали файлы&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;только с применением плагина. Это обусловлено, с моей точки зрения, извечным желанием компании Билла Гейтса «перетянуть одеяло на себя».&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot; lang=&quot;en-US&quot;&gt;&lt;span lang=&quot;ru-RU&quot;&gt;Браузер&amp;nbsp;&lt;/span&gt;Mozilla&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;и некоторые другие&lt;/span&gt;&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;отобража&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;ю&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;т графику из файлов&amp;nbsp;&lt;/span&gt;SVG,&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;но не мо&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;гу&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;т использовать их в качестве фоновых&amp;nbsp;&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;в связи с тем, что размер изображения может быть опущен (не указан в файле), а вычисление реальных координат объектов вызывает трудности&lt;/span&gt;&lt;span lang=&quot;ru-RU&quot;&gt;. И только&amp;nbsp;&lt;/span&gt;Google Chrome&amp;nbsp;&lt;span lang=&quot;ru-RU&quot;&gt;с легкостью обращается с файлами&amp;nbsp;&lt;/span&gt;SVG.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Основную конкуренцию формату сегодня составляет графика интегрированная в новый, пока еще, формат гипертекста&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;HTML5.&amp;nbsp;&lt;/span&gt;Теперь картинки можно описывать прямо в тексте страницы выделив этот фрагмент кода парным тэгом&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;&amp;lt;CANVAS&amp;gt;.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Анимация и интерактивность, которые также предусмотрены в формате&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG,&amp;nbsp;&lt;/span&gt;гораздо лучше проработаны во&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Flash&amp;nbsp;&lt;/span&gt;и даже несмотря на то, что он требует установки плагина&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;(Flash Player)&amp;nbsp;&lt;/span&gt;на большинстве браузеров, он пользуется гораздо большей популярностью. Напомню, что формат&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Flash&amp;nbsp;&lt;/span&gt;был создан и разрабатывался компанией&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Macromedia,&amp;nbsp;&lt;/span&gt;а в последующем перешел к&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;Adobe&amp;nbsp;&lt;/span&gt;и развивается ею по сей день.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;И все же, минусы рассмотренные в данном параграфе нисколько не уменьшают силу формата&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG,&amp;nbsp;&lt;/span&gt;который стоит изучить хотя бы для того, чтобы в последующем лучше и легче разбираться в векторной графике в целом.&lt;/div&gt;&lt;h1&gt;Содержание спецификации&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG 1.1&lt;/span&gt;&lt;/h1&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Давайте для ознакомления с форматом&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;рассмотрим содержание спецификации. В первых двух главах мы видим введение и концепцию языка. В третьей главе речь идет о модели представления, т.е. о том, как программы предназначенные для отображения файлов&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;должны их читать. Затем в четвертой главе рассматриваются базовые типы и интерфейсы, а следом в пятой главе рассмотрена структура файлов (документов)&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG.&amp;nbsp;&lt;/span&gt;Глава 6 посвящена стилизации объектов рисунка. Седьмая глава рассматривает систему координат, трансформации и единицы измерения. В восьмой главе говорится о кривых, а в следующей 9 главе остальных базовых фигурах, отдельно в 10 главе рассмотрен объект «Текст». Далее в 11 главе речь идет о заливке объектов, их обводке и маркерах. Глава 12 посвящена краскам, тринадцатая глава расскажет об альтернативных способах заливки, таких как градиент и текстура. В главе 14 говориться об обрезке, маскировании и композиционировании. Пятнадцатая глава посвящена визуальным фильтрам. Главы 16,17 и 18 сообщат нам соответственно об интерактивности, связывании и использовании сценариев. Следующая 19 глава расскажет об анимации, 20-я о шрифтах, 21-я о метаданных, 22-я об обратной совместимости, 23-я о расширяемости. Затем в спецификации приведены приложения в количестве 17-ти штук, которые окончательно перекрывают все вопросы связанные с форматом&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG.&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Последняя спецификация пока еще не переведена на русский язык, а стало быть для многих сложна в освоении. Цель данной статьи, в цикле из нескольких частей, донести читателю основные положения спецификации на примере написания файла&amp;nbsp;&lt;span lang=&quot;en-US&quot;&gt;SVG&amp;nbsp;&lt;/span&gt;изображающего пейзаж.&lt;/div&gt;&lt;div align=&quot;JUSTIFY&quot;&gt;Порядок освоения будет отличаться от предложенного содержанием спецификации, что обусловлено нарастающей сложностью рассматриваемого материала.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/245771492090372013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/245771492090372013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/245771492090372013'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/svg-1.html' title='SVG. Масштабируемая векторная графика. Часть 1'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiocooabwvZ_cVOzupNmVS8bvf42-P_mm9JNScyIKuqUKSJ9XnX_FynGDGivbPtNgLGRYIUSEbukWtcpQgc3N-_g70eSq8Gl31pMYW3hv5kdenJo4L-D_jvNNPDAcSczEr4_RlvyIPCHtr5/s72-c/part1_html_m784d640c.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9039896399603088005.post-3527014951327176589</id><published>2011-10-22T16:19:00.000-07:00</published><updated>2011-10-22T16:19:48.865-07:00</updated><title type='text'>HTML5</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;
Собрался я, было, написать статью об последних достижениях в области интернет технологий, а именно о новом поколении языка разметки гипертекста HTML5 и вместе с ним каскадных таблицах стилей CSS3, да языке скриптов JavaScript. Дело в том, что современные разработки в этой области продвинулись настолько, что уже не ясно где у сегодняшнего сайта «сердце» — на сервере или на клиентской стороне. В тень отходят серверные языки программирования и системы управления базами данных, как будто их и нет вовсе, когда на сцену выступают библиотеки JQuery, Prototype и все те чудеса которые они демонстрируют пользователям современных сайтов, социальных сетей и электронных магазинов.&lt;br /&gt;
Приступая к работе я рассчитывал, что речь пойдет об AJAX, интерактивных интерфейсах и прочих украшательствах вносимых в работу web-страниц скриптами JS. Думал, HTML5 совместно с CSS3 дают авторам новые возможности в оформлении контента и только.., но это лишь верхушка айсберга, который можно не стесняясь назвать «Интернетом V поколения».&lt;br /&gt;
Подбирая материал для статьи я немного «погуглил» и первая же интересная ссылка поведала мне вот что: «W3C с радостью объявляет о новом курсе обучения, посвященном “разработке Игр в HTML5”. Цель этого курса состоит в том, чтобы слушатели научились использовать открытые web-технологии типа HTML5, CSS3 и JavaScript для создания мультипользовательских браузерных игр.»&lt;br /&gt;
Не скрою, что первой шокирующей новостью для меня явился сам факт, что Консорциум проводит курсы обучения, а лишь потом стала доходить остальная информация. Неужели теперь для создания online игры не нужны PHP, ASP, Perl и т. п.?&lt;br /&gt;
Те из вас, кто располагает свободным временем, знанием английского языка и 225€ еще могут успеть записаться на этот курс, вот ссылка &amp;nbsp;http://www.w3techcourses.com/course/view.php?id=9. Я же, к сожалению, из вышеперечисленного ничем похвастать не могу, поэтому вынужден буду разбираться сам.&lt;br /&gt;
Начало курса 30.10.2011. Читать лекции будет Михал Будзинский (JavaScript разработчик из Польши. В Твиттере вы можете найти его по адресу https://twitter.com/#!/@michalbe). Весь курс будет состоять из четырех недель обучения, каждая их которых будет посвящена отдельной теме. Вот список тем:&lt;br /&gt;
«Основы JS и HTML5». Манипулирование DOM (Объектная модель документа), рисование на холсте &amp;lt;canvas&amp;gt;, сценарии игр и способы управления.&lt;br /&gt;
«Давайте заставим это двигаться!!!». Различные способы спрайтовой анимации HTML5, элементарные основы физики из школьного курса, коллизии (столкновения объектов сцены).&lt;br /&gt;
«Соединение с другими игроками». Методика подключения игроков, связь двух браузеров без использования серверных языков программирования, многопользовательская игра.&lt;br /&gt;
«Развертывание игры». Вся мощь JavaScript, HTML5 &amp;amp; CSS3 вне настольного браузера, особенности мобильных устройств, публикация в AppStores.&lt;br /&gt;
В ближайшее время обещаю представить вам перевод статьи Михала Будзинского «Простая игра на HTML5 Canvas».&lt;br /&gt;
&amp;nbsp;Андрей [trefas] Семенов&lt;br /&gt;
trefas@yandex.ru&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aismnw.blogspot.com/feeds/3527014951327176589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://aismnw.blogspot.com/2011/10/html5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/3527014951327176589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9039896399603088005/posts/default/3527014951327176589'/><link rel='alternate' type='text/html' href='http://aismnw.blogspot.com/2011/10/html5.html' title='HTML5'/><author><name>trefas</name><uri>http://www.blogger.com/profile/03802927030424108236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgghYVjIJfgke7_r3v3GA6WmeYv-Ap2ZB8PDr8FxYPspM8zoHQ3gC5-97U6AqAWsORiM5VEGgq3Itg8mVK_heBFE-Di67FTIWpFet78Us2hLJWnx7MOtLc0l02tBN1tGA/s1600/100_0327.JPG'/></author><thr:total>0</thr:total></entry></feed>