Печатай и играй

Апрель 29, 2011

Качай “Крысь, добивай”, печатай и играй! Моя первая настольная игра по мотивам Манчкинской серии.

Подробнее…

Работает во 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 картинка с прозрачными областями положенная в 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;

}

Например, 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;

Источник: flashcomguru.com

Для реализации проигрывания видео с любой позиции надо:

Простой сокет сервер на 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 нужно использовать только в случае курсива или жирного шрифта во внедряемом файле.

Немного не по теме, но зато как удобно и не надо никаких подозрительных программ ;)

В Firefox открываем vkontakte, заходим в аудиозаписи, затем запускаем любую песню, чтобы сменилась иконка. Берем вкладку и тащим её на панель закладок. Заходим в свойства этой закладки, удаляем имя, а в строке адреса пишем это:

UPD. 30 апреля 2011 года

javascript: (function(){playAudioNew=function(a){window.open(document.getElementById('audio_info' + a).value.split(",")[0]);}})()

Готово! Теперь, если просто кликнуть на значок, находясь на странице аудиозаписей пользователя музыка после применения скрипта, будет не проигрываться, а скачиваться. (Если у Вас установлен плагин, то идём в меню файл > Сохранить как…). Переход на другую страницу возвращает всё обратно.

На одном из форумов, видел тему про удаление фона из видео прямо во 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;

}

Исходники примера можно скачать здесь.

При создании флеш презентаций с помощью прожектора зачастую стандартное меню оказывается лишним. Его можно убрать с помощью подходящего редактора ресурсов. Можно воспользоваться Resource Builder или, например, идущим с visual studio встроенным редактором. Я буду использовать Resource Builder.

Для начала откроем FlashPlayer.exe (лучше сделать копию) и начнем ковырять его. Сначала настроим сочетания клавиш. Переходим в пункт Accelerators и редактируем поля, как показано на рисунке:

Затем из пункта Menu удаляем все подпункты кроме 610 и 613 английского языка. В пункте String меняем значение заголовка флеш плеера для каждого используемого языка. Можно оставить pop-up меню с пунктом “About Flash Player” и отредактировать текстовые поля в Dialog. Также меняем иконку.

Теперь открываем наш отредактированный прожектор, открываем swf с помощью ctrl+O, а затем сохраняем прожектор (ctrl+S)