<?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: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-236947814065845021</id><updated>2011-08-04T04:52:04.483-07:00</updated><category term='objfpc'/><category term='flash'/><category term='opengl'/><category term='as3'/><category term='delphi'/><title type='text'>sokal32</title><subtitle type='html'>Блог sokal32. Всякое о HTML, PHP, JS, AJAX, Flash, ActionScript, Delphi/ObjFPC, OpenGL.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-3282578796423656649</id><published>2010-04-16T12:20:00.000-07:00</published><updated>2010-04-16T12:51:12.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='objfpc'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Вывод статических моделей с использованием VBO</title><content type='html'>О том что такое VBO можно почитать тут: http://steps3d.narod.ru/tutorials/tutorial-VBO.html, выдержка: "Использование данного расширения позволяет кэшировать (хранить) различные типы данных (как информацию о вершинах, так и индексы в массив вершин) в быстрой памяти графического ускорителя".&lt;br /&gt;&lt;br /&gt;Т.е. используя данное расширение можно ускорить вывод геометрии, особенно статической (не изменяющейся), передав одинажды данные граф. ускорителю можно сократить много ФПС-ов! :) &lt;br /&gt;&lt;br /&gt;Я не буду рассказывать, теории и так полно, я примерик покажу (который бы мне так помог!). Инициализация:&lt;br /&gt;&lt;pre class="brush: delphi"&gt;&lt;br /&gt;type&lt;br /&gt; PVec2 = ^TVec2;&lt;br /&gt; TVec2 = record&lt;br /&gt;  x, y: Single;&lt;br /&gt; end;&lt;br /&gt; &lt;br /&gt; PVec3 = ^TVec3;&lt;br /&gt; TVec3 = record&lt;br /&gt;  x, y, z: Single;&lt;br /&gt; end;&lt;br /&gt; &lt;br /&gt; //это наш формат хранения вершин (положение, нормаль, текст. коорд.)&lt;br /&gt; TVert = record&lt;br /&gt;  vert, norm: TVec3;&lt;br /&gt;  coord: TVec2;&lt;br /&gt; end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt; vbo: TGLint;&lt;br /&gt; //numVerts - кол-во вершин, verts - массив вершин (в примере не заполняется)&lt;br /&gt; numVerts: Integer;&lt;br /&gt; verts: array of TVert;&lt;br /&gt;&lt;br /&gt;//итак создаем буфер, GL_STATIC_DRAW_ARB указывает на то что мы не собираемся изменять данные после их передачи граф. ускорителю&lt;br /&gt;glGenBuffersARB(1, @vbo);&lt;br /&gt;glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbo);&lt;br /&gt;glBufferDataARB(GL_ARRAY_BUFFER_ARB, numVerts * SizeOf(TVert), @verts[0], GL_STATIC_DRAW_ARB);&lt;br /&gt;glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;И отрисовка:&lt;br /&gt;&lt;pre class="brush: delphi"&gt;&lt;br /&gt;glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);&lt;br /&gt;&lt;br /&gt;//включаем массивы положений, нормалей и текстурных координат&lt;br /&gt;glEnableClientState(GL_VERTEX_ARRAY);&lt;br /&gt;glEnableClientState(GL_NORMAL_ARRAY);&lt;br /&gt;//координаты будем задавать для текстуры на "0" слое&lt;br /&gt;glClientActiveTextureARB(GL_TEXTURE0_ARB);&lt;br /&gt;glEnableClientState(GL_TEXTURE_COORD_ARRAY);&lt;br /&gt;&lt;br /&gt;glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbo);&lt;br /&gt;&lt;br /&gt;//указываем смещения к положению, нормали и текс. коорд. внутри нашей вершины TVert&lt;br /&gt;//положение как и нормаль у нас представлено 3 целыми&lt;br /&gt;glVertexPointer(3, GL_FLOAT, SizeOf(TVert), Pointer(0));&lt;br /&gt;glNormalPointer(GL_FLOAT, SizeOf(TVert), Pointer(3 * SizeOf(Single)));&lt;br /&gt;//текс. коорд. у нас представлена 2 целыми&lt;br /&gt;glTexCoordPointer(2, GL_FLOAT, SizeOf(TVert), Pointer(6 * SizeOf(Single)));&lt;br /&gt;&lt;br /&gt;//и собственно выводим, start - номер вершины с которой начинать вывод, count - кол-во вершин (не примитивов а вершин)&lt;br /&gt;glDrawArrays(GL_TRIANGLES, start{0}, count{numVerts});&lt;br /&gt;&lt;br /&gt;glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);&lt;br /&gt;glPopClientAttrib;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-3282578796423656649?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/3282578796423656649/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2010/04/vbo.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/3282578796423656649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/3282578796423656649'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2010/04/vbo.html' title='Вывод статических моделей с использованием VBO'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-8655127899367493589</id><published>2010-04-09T06:52:00.001-07:00</published><updated>2010-04-12T00:15:02.463-07:00</updated><title type='text'>Тестирование сайта при разных разрехениях</title><content type='html'>Часто нужно посмотреть как будет выглядеть сайт на КПК или на широкоформатном мониторе с разрешением 1920х1024 имя в распоряжении только ноутбук с макс. разрешением 1280х800. Для этого можно конечно же использовать онлайн-сервис http://testsize.com, но мне захотелось сделать свой аналог и далее я расскажу как я это все быстренько сделал. Итак нам нужен один слой на котором будут располагаться элементы управления просмотром и собственно iframe в который мы будем грузить страничку для тестов:&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;div style="padding: 5px; margin-bottom: 5px; width: 100%; height: 25px; background-color: #FF99FF;"&amp;gt;&lt;br /&gt;  &amp;lt;form id="site_form" onsubmit="return siteFormSubmit()"&amp;gt;&lt;br /&gt;  URL: &amp;lt;input type="text" id="site_link" /&amp;gt;&lt;br /&gt;  Размер: &amp;lt;select id="site_size" onchange="siteSizeChange()"&amp;gt;&lt;br /&gt;   &amp;lt;option value="240x320"&amp;gt;240x320&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="640x480"&amp;gt;640x480&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="800x600"&amp;gt;800x600&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="1024x600"&amp;gt;1024x600&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="1024x768"&amp;gt;1024x768&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="1280x800"&amp;gt;1280x800&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="1280x1024"&amp;gt;1280x1024&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="1366x768"&amp;gt;1366x768&amp;lt;/option&amp;gt;&lt;br /&gt;   &amp;lt;option value="1920x1024"&amp;gt;1920x1024&amp;lt;/option&amp;gt;&lt;br /&gt;  &amp;lt;/select&amp;gt;&lt;br /&gt;  &amp;lt;input type="submit" value="Обновить" /&amp;gt;&lt;br /&gt; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;iframe id="site_layout" style="border: #000000 1px dashed; width: 240px; height: 320px"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/pre&gt;&lt;br /&gt;Как видно на формочке у нас поле для ввода адреса страницы, список с всевозможными разрешениями для просмотра и кнопочка обновить при клике на которую будет обновляться страница.&lt;br /&gt;Первый шаг это отследить момент когда изменяется разрешение (site_size.onchange):&lt;br /&gt;&lt;pre class="brush: js"&gt;&lt;br /&gt;function siteSizeChange()&lt;br /&gt;{&lt;br /&gt; //разделяем ширину и высоту&lt;br /&gt; var size = $('#site_size').val().split('x');&lt;br /&gt; //применяем к iframe&lt;br /&gt; $('#site_layout').css({width: size[0], height: size[1]});&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;И последнее это отследить нажатие на кнопку "Обновить" нашей формочки (onsubmit):&lt;br /&gt;&lt;pre class="brush: js"&gt;&lt;br /&gt;function siteFormSubmit()&lt;br /&gt;{&lt;br /&gt; //получаем введенный URL&lt;br /&gt; var url = $('#site_link').val();&lt;br /&gt; //устанавливаем атрибут "src" для нашего iframe&lt;br /&gt; $('#site_layout').attr('src', url);&lt;br /&gt; &lt;br /&gt; return false;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Ну и я думаю видно по исходникам что используется jQuery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-8655127899367493589?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/8655127899367493589/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2010/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/8655127899367493589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/8655127899367493589'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2010/04/blog-post.html' title='Тестирование сайта при разных разрехениях'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-489033026246996707</id><published>2010-04-08T03:03:00.000-07:00</published><updated>2010-04-08T06:52:50.612-07:00</updated><title type='text'>PHP, JS и cp1251</title><content type='html'>Бывает что вместо текстовых данных на русском языке получаем мы знаки вопроса или какие-то ромбики, или еще что-то. Так вот, хочется запечатлить для себя несколько основных моментов которые могут помочь избежать данных ситуаций:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;не забываем собственно кодировать файлы в cp1251, а также созданные нами БД&lt;/li&gt;&lt;br /&gt;&lt;li&gt;не забываем указывать Header("Content-type: text/html; charset=windows-1251") в тех скриптах где кодировка не указана в теге &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=windows-1251"&amp;gt&lt;/li&gt;&lt;br /&gt;&lt;li&gt;иногда нужно перед выполнением запросов к MySQL вызывать mysql_query('SET NAMES cp1251')&lt;/li&gt;&lt;br /&gt;&lt;li&gt;данные полученые запросом через JavaScript кодируются в UTF-8 и их нужно конвертировать: iconv('UTF-8', 'windows-1251', $_POST['name'])&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-489033026246996707?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/489033026246996707/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2010/04/php-cp1251.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/489033026246996707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/489033026246996707'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2010/04/php-cp1251.html' title='PHP, JS и cp1251'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-6007238546378863800</id><published>2010-04-07T02:57:00.001-07:00</published><updated>2010-04-07T03:08:43.838-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Вызов функции ActionScript из JavaScript</title><content type='html'>Для начала в коде flash-ролика нужно добваить функцию к списку экспортируемых:&lt;br /&gt;&lt;pre class="brush: as3"&gt;&lt;br /&gt;ExternalInterface.addCallback("funcName", funcImpl);&lt;br /&gt;&lt;br /&gt;function funcImpl(i:Number):void&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь эта функция является методоб нашего ролика. Т.е. нам нужно найти наш ролик и вызвать метод:&lt;br /&gt;&lt;pre class="brush: js"&gt;&lt;br /&gt;function getSWF(swfId)&lt;br /&gt;{&lt;br /&gt;  if(document.getElementById)&lt;br /&gt;  {&lt;br /&gt;    return document.getElementById(swfId);&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;    return window.document.getElementById(swfId);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//здесь "myMovie" это id ролика&lt;br /&gt;getSWF('myMovie').funcName(23);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-6007238546378863800?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/6007238546378863800/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2010/04/actionscript-javascript.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/6007238546378863800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/6007238546378863800'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2010/04/actionscript-javascript.html' title='Вызов функции ActionScript из JavaScript'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-4960129024845373471</id><published>2009-12-30T01:54:00.000-08:00</published><updated>2010-04-07T02:56:14.614-07:00</updated><title type='text'>Создание MovieClip'a в коде</title><content type='html'>Итак, создаем наш MovieClip с именем MyClip (не путать Name и Instance Name, я имею ввиду Name), в библиотеке щелкаем правой кнопкой на созданном MovieClip-е, выбираем Properties. В появившемся окне есть галочка Export for ActionScript, отмечаем её, теперь в поле Class должно появиться MyClip. На этом дела со сценой закончены, код:&lt;br /&gt;&lt;pre class="brush:as3"&gt;&lt;br /&gt;var mc:MovieClip = new MyClip();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-4960129024845373471?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/4960129024845373471/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2009/12/movieclip.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/4960129024845373471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/4960129024845373471'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2009/12/movieclip.html' title='Создание MovieClip&apos;a в коде'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-7351519832757046149</id><published>2009-12-21T08:41:00.000-08:00</published><updated>2009-12-21T08:48:12.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Связь браузера с роликом или переменные "flashvars"</title><content type='html'>При интеграции ролика на страницу можно передать ему свои параметры в переменной flashvars. Например:&lt;pre class="brush: html"&gt;&lt;br /&gt;&amp;lt;embed src="/flashFile.swf" flashvars="p1=var1&amp;p2=var2" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;Или:&lt;pre class="brush: html"&gt;&amp;lt;object&amp;gt;&amp;lt;param name="flashvars" value="p1=var1&amp;p2=var2" /&amp;gt;&amp;lt;/object&amp;gt;&lt;/pre&gt;Теперь в ролике можно получить значения соответствующих параметров, вот так:&lt;pre class="brush: as3"&gt;var p1:String = root.loaderInfo.parameters.p1;&lt;br /&gt;var p2:String = root.loaderInfo.parameters.p2;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-7351519832757046149?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/7351519832757046149/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2009/12/flashvars.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/7351519832757046149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/7351519832757046149'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2009/12/flashvars.html' title='Связь браузера с роликом или переменные &quot;flashvars&quot;'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-236947814065845021.post-5713379625821267584</id><published>2009-12-18T05:02:00.001-08:00</published><updated>2009-12-18T05:16:34.898-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Tween не доигрывает до конца в ActionScript 3.0</title><content type='html'>Разрабатываю по работе флешку - карту Киева, естественно присутствуют эффекты увеличения, высветления, перемещения и для их реализации используется что-то типа:&lt;br /&gt;&lt;pre class="brush:as3"&gt;var tween:Tween = new Tween(items[curItem], "alpha", Strong.easeOut, items[curItem].alpha, 0, 0.8, true);&lt;/pre&gt;И вот в чем дело, иногда анимация не доходит до конца и на карте например остается левый кусок с alpha = 0.1. Как не странно искать пришлось не долго... Проблема в том что AS3 ищет безхозные Tween-ы (а мои именно такие, т.к. являются локальными переменными) и убивает их (собирает мусор вобщем). Поэтому во избежание этого приспособился так:&lt;br /&gt;&lt;pre class="brush:as3"&gt;&lt;br /&gt;//все анимации хранятся в словаре&lt;br /&gt;private var tweens:Dictionary;&lt;br /&gt;&lt;br /&gt;tweens = new Dictionary(false);&lt;br /&gt;&lt;br /&gt;//создание анимации, установка обработчика конца проигрывания анимации и добавление её в словарь&lt;br /&gt;var tween:Tween = new Tween(items[curItem], "alpha", Strong.easeOut, items[curItem].alpha, 0, 0.8, true);&lt;br /&gt;tween.addEventListener(TweenEvent.MOTION_FINISH, tweenMotionFinish);&lt;br /&gt;tweens[tween] = tween;&lt;br /&gt;&lt;br /&gt;//когда анимация проиграна можно смело её удалять&lt;br /&gt;private function tweenMotionFinish(e:TweenEvent):void&lt;br /&gt;{&lt;br /&gt;   tweens[e.currentTarget] = null;&lt;br /&gt;   delete tweens[e.currentTarget];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/236947814065845021-5713379625821267584?l=sokal32.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sokal32.blogspot.com/feeds/5713379625821267584/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sokal32.blogspot.com/2009/12/var-tweentween-new-tweenitemscuritem.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/5713379625821267584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/236947814065845021/posts/default/5713379625821267584'/><link rel='alternate' type='text/html' href='http://sokal32.blogspot.com/2009/12/var-tweentween-new-tweenitemscuritem.html' title='Tween не доигрывает до конца в ActionScript 3.0'/><author><name>Sokal32</name><uri>http://www.blogger.com/profile/12072669244976971956</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_AKRjAJK0Zbo/S7-FSkJ58pI/AAAAAAAAAJw/mm88HcEoMNU/S220/sokal_eating.jpg'/></author><thr:total>1</thr:total></entry></feed>
