В нынешнее время информационных технологий мы все больше и больше начали ценить свое время. Мы уже не хотим терять 2 часа своей жизни на убогий фильм или сидеть, скучать в кинотеатре над дешевым творением очередного горе режиссера – тратим драгоценное время, портим себе настроение и т.п.
Так же есть еще игры, где объективная оценка критична. Конечно, многие разработчики предлагают ознакомиться с игрой посредством Demo версии, но не у всех есть время на демонстрационную версию игры. Здесь мы тоже хотим знать ответ на главный вопрос: «Как игра? Стоит покупать/качать?»
Не будем делать излишней рекламы, и вдаваться в подробности, но существует замечательный портал-агрегат оценок мультимедийной продукции: игры, фильмы, телевизионные шоу, музыка. Это Metacritic. Прелесть этого портала, что он собирает оценки престижных издательств, интернет порталов, и предоставляет нам уже объективное мнение критиков о продукции. Так же существует оценка пользователей, и каждый волен сам уже сделать выбор какая оценка для него более приоритетная: оценка критиков или пользователей.
Немного о приложении:
1. Подстраивается под любой размер. (По умолчанию, изменяется размер шрифта)
2. Обладая исходными файлами вы можете легко изменить дизайн.
Логика работы следующая: вы передаете в приложение тип мультимедиа содержимого и полное название, к примеру: game, xbox-360, Dante’s Inferno; приложение формирует ссылку, и обрабатывает данные, и отображает уже оценку.
Так же вы можете воспользоваться демонстрацией работы приложения, нажимайте по интересующим вас играм или фильмам.
Специально для людей, которые не очень «дружат» с AS3. Сделал простенький preloader.
Ради интереса воспользовался ByteTween.
Все что нужно, это иметь под рукой preloader.fla, в котором, на сцене должен находиться MovieClip, будущий preloader.
Preloader может состоять из 100 фреймов, каждый фрейм соответствует проценту загрузки, а так же может содержать текстовое поле (Dynamic) с именем ‘txt’, для отображения статуса загрузки.
Все что нужно произвести, это небольшие изменения в файле Settings.as, где нужно указать путь к файлу, который нужно загружать, если preloader.swf и загружаемый файл находятся в одной папке, то просто укажите название файла. А так же в Settings.as, необходимо указать имя MovieClip preloader’а, находящегося на сцене. По умолчанию, ‘stagePreloader’.
P.S.
ByteTween ужасный Tween Engine, не пользуйтесь им, в серьезных проектах, он не стоит сэкономленных 1,5кб.
Старался максимально доходчиво написать…
Papervision: При использовании 3Д на сайте, в 90% случаев необходимы 3D объекты в масштабе 1:1 к 2D объектам. В последнем проекте необходимо было сделать куб как элемент навигации, при этом текстуры на гранях не должны были масштабироваться:
[as]
_camera.z = (_camera.zoom – 1) * _camera.focus + _cubeSide * 0.5;
[/as]
куб находится в нулевых координатах.
Если есть XML дерево, в котором, одно и тоже XML property может присутствовать не во всех элементах дерева. И при применении фильтра:
[as]
myXML..item.(@id == someID)
[/as]
вы получаете ReferenceError о том, что переменная @id не определена. Используйте другой фильтр:
[as]
myXML..item.(attribute(‘id’) == someID)
[/as]
При разработке сайта, на котором будет функционал требующий работы с SharedObject, приходится поверять логику работы, когда человек впервые на сайте, и не только. Самый простой способ, это удалить файл .sol. Если вы думаете, что очистка кэша в браузере поможет вам, то вы ошибаетесь. Так же вы конечно можете сделать программную кнопку, при нажатии на которую, будет происходить удаление SharedObject. Но все же, пару раз удалить файл из системы, как по мне, проще. Более подробно, где их искать в различных системах, можно почитать в Wikipedia
Timer отрабатывает не сразу после вызова метода start(), а лишь через значение delay, которое вы указали в конструкторе. Что бы заставить отработать сразу, правильнее всего сделать вот так:
[as]
_someTimer.dispatchEvent(new TimerEvent(TimerEvent.TIMER));
_someTimer.start();
[/as]
[as]
this.someTimerListener(null);
[/as]
Вызвать сразу listener, плохо тем, что вы не сможете использовать updateAfterEvent
Маска с поддержкой прозрачности с помощью BlendMode. Хорошая вещь, как для программистов, когда требуется создать полупрозрачную маску, и при этом контент под маской анимируется, так и для аниматоров, так как не нужно никакого кода.
Техника очень проста:
есть контейнер в котором все объекты, маска и содержимое, которое нужно поместить под маску. Для этого контейнера устанавливаем BlendMode.LAYER.
[as]
_container.blendMode = BlendMode.LAYER;
[/as]
Все размещается по слоям. Маска обязательно находится выше содержимого. Для маски устанавливаем BlendMode.ALPHA.
[as]
_gradMask.blendMode = BlendMode.ALPHA;
[/as]
Если необходимо маскировать содержимое выходящее за пределы маски, создается еще одна маска, и уже привычным способом применяется к содержимому
[as]
_content.mask = _mask;
[/as]
В итоге, все будет выглядеть где то так:
[as]
_container.addChild(_content);
_container.addChild(_gradMask);
_container.addChild(_mask);
P.S.
Более подробно для аниматоров. Создаем Movieclip, меняем ему BlendMode на Layer, помещаем в него 3 Movieclip’a: Нижний слой – Содержимое, Средний слой – маска, делаем ее маской для содержимого, Верхний слой – полупрозрачная маска, меняем ей BlendMode на Alpha (не нужно полупрозрачную маску совать под маску, или пытаться ее тоже сделать маской).
P.P.S.
Если кто то всю жизнь пользовался только таким способом с помощью BlendMode, то для вас есть более простой способ, который отлично подходит для статического содержимого, к примеру текст.
[as]
_mask.cacheAsBitmap = true;
_content.cacheAsBitmap = true;
_content.mask = _mask;
[/as]
Те же кто думал, что нужно BlendMode + cacheAsBitmap, то исправляйте код. Разве что вы могли использовать cacheAsBitmap для сложного вектора.
1. Быстрое получение значения после запятой.
[as]
public function getDecimal($value : Number) : Number {
return $value – ($value >> 0);
}
[/as]
2. Что бы не было проблем с получением DisplayObject’а после использования myMovieClipHolder.gotoAndStop(). Используйте Event.ENTER_FRAME, до того как событие отработает один раз. Использование MovieClip распространено в многоязычных версиях сайтов, сделав лэйблы: ru, en, ua.
[as]
private function onChangelanguage(e : Event) : void {
if(_k > 0){
this.removeEventListener(Event.ENTER_FRAME, onChangelanguage);
registerMC();
}
_k++;
}
[/as]
3. Являюсь ярым поклонником TweenLite разрабатываемого Jack Doyle. Не так давно, проект стал платформой для программной анимации, и легко расширяется плагинами. Я с вами поделюсь двумя плагинами, один из которых я использую в 40% всех программных анимаций – AutoDeletePlugin. ShortRadianRotationPlugin – позволяет работать с радианами, как это сделано в Alternativa 3D. AutoDeletePlugin – применяется только для DisplayObject. По завершению анимации, больше не нужно использовать onComplete, что бы удалить DisplayObject.
4. Быстрый и удобный, но не самый надежный способ убрать интерактивность с элементов интерфейса. Допустим есть некая форма, элементы которой содержатся в одном контейнере, пусть он будет называться formHolder.
[as]
private function toggleForm($state : Boolean) : void {
formHolder.mouseChildren = $state;
}
[/as]
Главный минус такой реализации, что необходимо следить за теми элементами интерфейса, которые требуют игнорирования событий от мыши. К примеру лейблы на кнопках, если таких элементов нет, то можете использовать этот метод смело. Так же можно дать понять пользователю, что форма действительно неактивная, добавив одну строчку кода:
[as]
private function toggleForm($state : Boolean) : void {
formHolder.mouseChildren = $state;
formHolder.alpha= ($state) ? 1 : 0.6;
}
[/as]
5. Разрабатывая Pure AS3 проект, вы не сможете использовать «плюшку» Flash Player 10 для работы с текстом. Так как новый фреймворк для работы с текстом использует совсем другой тип встроенного текста, обычный встроенный текст в проекте имеет тип EMBEDDED, когда необходим EMBEDDED_CFF. Решить эту проблему сможет лишь новый Flex SDK 4 версии с расширенным метатэгом Embbed. Но учтите, шрифт будет встроен дважды.