Печатай и играй
Апрель 29, 2011

Качай “Крысь, добивай”, печатай и играй! Моя первая настольная игра по мотивам Манчкинской серии.
Разный код для дебаг и релиз версий
Декабрь 13, 2010
Работает во FlashDevelop:
CONFIG::debug {
trace("Only Debug version");
}
CONFIG::release {
Alert.show("Only release version code");
}
Также можно переопределять функции:
CONFIG::debug
private function init():void
{
initEditor();
initGame();
}
CONFIG::release
private function init():void
{
initGame();
}
Этот способ, не очень удобен, например при создании SWC библиотек. В таких случаях можно использовать:
public static var isDebug:Boolean = new Error().getStackTrace().search(/:[0-9]+\]$/m) > -1;
Прозрачный PNG и мышиные события
Июнь 11, 2010
У вас есть png картинка с прозрачными областями положенная в Sprite. События MouseEvent.ROLL_OVER и MouseEvent.ROLL_OUT срабатывают на прямоугольной области картинки вместо того, чтобы реагировать лишь на непрозрачные пиксели.
Демо:
Решение – скачать проект:
public function mouseHits(target:DisplayObject):Boolean{
if (target == null || target.stage == null){
return false;
}
if (target.hitTestPoint(target.stage.mouseX, target.stage.mouseY)){
var aMatrix:Matrix = new Matrix();
aMatrix.translate(-target.mouseX, -target.mouseY);
var bd:BitmapData= new BitmapData(1, 1, true, 0x00000000);
bd.draw(target, aMatrix);
var alpha:uint = ((bd.getPixel32(0, 0) >> 24) & 0xFF);
bd.dispose();
return alpha > 0x0F;
}
return false;
}
Дублирование загруженного в loader.content ролика
Июнь 2, 2010
Например, swf файл анимации один, а персонажей с этой анимацией несколько, а мы хотим продублировать эту анимацию без повторной загрузки файла.
Создаём новый fla файл с одним кадром на главном TimeLine, в котором лежит MovieClip, помеченный галкой Export for ActionScript. Тогда код дублирования будет примерно следующим:
try {
var content:MovieClip = loader.content as MovieClip;
if (content.numChildren == 1 && content.totalFrames == 1) {
var child:Object = content.getChildAt(0) as Object;
var ChildClass:Class = child.constructor as Class;
if (ChildClass != MovieClip && ChildClass != Shape && ChildClass != Sprite){
return new ChildClass();
}
}
}catch (err:Error){
}
return loader.content;
Загрузка видео с произвольной позиции
Февраль 24, 2010
Источник: flashcomguru.com
Для реализации проигрывания видео с любой позиции надо:
- Конвертировать видео в FLV
- Внедрить метаданные с помощью небольшой утилиты
- Разместить на сервере PHP скрипт
Пример сокет сервера для Flash на PHP
Февраль 24, 2010
Простой сокет сервер на php для небольшой онлайн игры лежит тут
Для того, чтобы запустить сервер на компьютере должен быть установлен php (например в сборке с Apache и MySQL). В командной строке windows пишем:
php [путь_к_socketServer.php]
Пример клиентской части можно посмотреть в файле SocketConnection.as.
Внедрение шрифтов
Февраль 24, 2010
Источник: garbage-collector.ru
[Embed(source="/../lib/fonts/Verdana.ttf", fontFamily="Verdana", fontStyle="italic", fontWeight="bold", unicodeRange="U+0020-U+007F, U+00A0-U+00FF, U+0400-U+04FF")] private var VerdanaFont:Class;
Список интервалов для unicodeRange (другие можно найти в flex sdk/frameworks/flash-unicode-table.xml):
- U+0020-U+007F — основная латиница;
- U+00A0-U+00FF — дополнительные символы, которые могут понадобиться (вроде знака © или русских кавычек-елочек);
- U+0400-U+04FF — кириллические символы верхнего и нижнего регистров.
- U+0030-U+0039,U+002E — цифры
Параметры fontStyle и fontWeight нужно использовать только в случае курсива или жирного шрифта во внедряемом файле.
Сохраняем музыку из вконтакта
Март 28, 2009
Немного не по теме, но зато как удобно и не надо никаких подозрительных программ
В Firefox открываем vkontakte, заходим в аудиозаписи, затем запускаем любую песню, чтобы сменилась иконка. Берем вкладку и тащим её на панель закладок. Заходим в свойства этой закладки, удаляем имя, а в строке адреса пишем это:
UPD. 30 апреля 2011 года
javascript: (function(){playAudioNew=function(a){window.open(document.getElementById('audio_info' + a).value.split(",")[0]);}})()
Готово! Теперь, если просто кликнуть на значок, находясь на странице аудиозаписей пользователя музыка после применения скрипта, будет не проигрываться, а скачиваться. (Если у Вас установлен плагин, то идём в меню файл > Сохранить как…). Переход на другую страницу возвращает всё обратно.
Pixel Bender пишем свой фильтр
Март 22, 2009
На одном из форумов, видел тему про удаление фона из видео прямо во Flash Player’е и решил попробовать сделать фильтр с помощью PixelBender:
Удаляем фон (нужна камера) Необходима разница в контрасте между фоном и изображением.
1. Качаем Pixel Bender последней версии с сайта Adobe (в нем появилась документация по всем функциям и синтаксису языка)
2. Пишем сам фильтр (у меня самый простой вариант для любого фона, работает плохо, если кто знает другой алгоритм, отпишите в комментариях) Суть такова: есть фон, и изображение из которого фон надо исключить. Сравниваем цвет пикселя фона с изображением. Берем расстояние от точки фона с координатами (r,g,b) до точки изображения. Если расстояние не превышает определенного числа (чувствительности), делаем пиксель полностью прозрачным.
kernel GreenScene
< namespace: "GreenScene";
vendor: "atflash.ru";
version: 1;
>
{
input image4 src;
input image4 background;
parameter float sensivity;
output pixel4 result;
void evaluatePixel()
{
pixel4 fp = sample( src, outCoord() );
pixel4 bp = sample( background, outCoord() );
float diff = sqrt(pow((fp.r-bp.r),2.0)+pow((fp.g-bp.g),2.0)+pow((fp.b-bp.b),2.0));
result = fp;
result.a = step(sensivity,diff/sqrt(3.0));
}
}
Все что идет до первой “{” обязательно и включает описание фильтра. Далее идут параметры передаваемые фильтру, а именно src (изображение Спрайта или другого DisplayObject’а на которое накладывается фильтр – передается в фильтр автоматически), background – BitmapData с фоном, и sensivity – чувствительность от 0 до 1. Затем описывается основная функция evaluatePixel, которая срабатывает src.width * src.height раз, и координаты текущей точки которой можно узнать с помощью outCoord() функции. Функция sample подобно функции getPixel32 (getPixel – для трёхканальных вычислений) возвращает объект типа pixel4 {a: alpha, r: red, g:green, b:blue}. Затем используя некоторые стандартные функции, о которых можно почитать в документации, мы получаем прозрачность текущего пикселя. Выполняем и компилируем код в pbj для FlashPlayer’а
3. Я хотел, сделать автономный класс для фильтра и поэтому воспользовался PBJ String Generator v1.1 – программой, для представления байтовых данных в текстовом формате. Для обратного конвертирования можно использовать функцию:
private function decode(str:String):ByteArray {
var temp:String = "";
var ba:ByteArray = new ByteArray();
for (var i:uint = 0; i < str.length / 2; i++) {
temp = str.substr(i * 2, 2);
ba.writeByte(parseInt(temp, 16) - 0x80);
}
return ba;
}
Исходники примера можно скачать здесь.
Модификация Flash Player’а
Ноябрь 29, 2008
При создании флеш презентаций с помощью прожектора зачастую стандартное меню оказывается лишним. Его можно убрать с помощью подходящего редактора ресурсов. Можно воспользоваться Resource Builder или, например, идущим с visual studio встроенным редактором. Я буду использовать Resource Builder.
Для начала откроем FlashPlayer.exe (лучше сделать копию) и начнем ковырять его. Сначала настроим сочетания клавиш. Переходим в пункт Accelerators и редактируем поля, как показано на рисунке:
Затем из пункта Menu удаляем все подпункты кроме 610 и 613 английского языка. В пункте String меняем значение заголовка флеш плеера для каждого используемого языка. Можно оставить pop-up меню с пунктом “About Flash Player” и отредактировать текстовые поля в Dialog. Также меняем иконку.
Теперь открываем наш отредактированный прожектор, открываем swf с помощью ctrl+O, а затем сохраняем прожектор (ctrl+S)
