понедельник, 25 февраля 2008 г.

Клик по вложенному мувику

Взято с форума, на заметку:

Есть MovieClip1, на нем событие MouseClick1
в этом MovieClip1 есть MovieClip2 и на нем тоже обработчик клика - MouseClick2. Когда нажимаем на MovieClip2 выполняются оба метода MouseClick1 и MouseClick2.
Как избежать? Хочу чтобы обрабатывался только MouseClick2.
Спасибо!

private function mouseClick1 (e:MouseEvent):void {
if (e.eventPhase == EventPhase.AT_TARGET) {
//
}
}

четверг, 14 февраля 2008 г.

TextField - концентратор багов

Очень утомляет и вызывает крайнюю степень раздражения недоделаность TextField-а. Наверное за его разработку отвечали индусы-двоешники. Индусы которые еще ничего, делали что посерьезнее. А двоешникам дали TextField.

Когда getCharIndexAtPoint(x, y) попадает на перенос строки ("\n"), то возвращает черти что (4294967295).

вторник, 12 февраля 2008 г.

Прочитать 100 раз и запомнить. Слабые ссылки

На форуме miramax коротко и ясно описал что такое weakReference
Прочитать и запомнить:

GC удаляет только те объекты, к которым нельзя добраться из точки входа (основного объекта программы, Document Class, функция main как хотите называйте).
Например есть стуктура:

А (точка входа)
/ \
Б В
|
Г
/ \
Д Е

Если в какой-то момент убить ссылку из Б в Г, то будут удалены и Г, и Д, и Е. Т.е. если из точки входа невозможно провести путь к объекту, то он будет удалён, т.к. такой объект не может быть использован в основном потоке исполнения(который запускается в точке входа) даже теоретически =).

Некоторые классы используют так называемые "мягкие ссылки", которые не учитываются при обходе GC. Путь из точки входа к ним провести можно, но это не повлияет на GC/

Например тот же Dictionary, если ссылка на объект определена только в нём, и свойство Dictionary.weakReference = true. То объект будет удалён.

Ещё пример - метод
EventDispatcher.addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
В евент диспатчере как бы инкапсулированы ссылки на все обработчики, но
если последний аргумент true, то при обходе GC они не будут учитываться. Т.е. если на событие подписан метод объекта, на который нет других ссылок. Объект будет всё равно удалён.

вторник, 5 февраля 2008 г.

среда, 30 января 2008 г.

Сохранить MovieClip как SWF файл на сервере.

Взято с forum.vingrad.ru/
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
var ByteLoader:URLLoader;
var ByteConverter:Loader;
var ByteConverter2:Loader;
var FileRequest:URLRequest;
var ba:ByteArray = new ByteArray;
function convert(event:Event)
{
//function BytesExample (event:Event) {
ByteLoader = new URLLoader();
ByteLoader.dataFormat = URLLoaderDataFormat.BINARY;
ByteLoader.addEventListener (Event.COMPLETE, onBytesLoaded);
FileRequest = new URLRequest ("mov.swf");
ByteLoader.load (FileRequest);
//}
function onBytesLoaded (evt:Event)
{
ByteConverter = new Loader();
ByteConverter.contentLoaderInfo.addEventListener (Event.COMPLETE, onConvertFinished);
ByteConverter.loadBytes (ByteLoader.data);
ba.writeBytes(ByteLoader.data);
//urla
var url_req:URLRequest = new URLRequest("http://127.0.0.1/img_create.php");
url_req.data = ba;
url_req.method = URLRequestMethod.POST;
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
url_req.requestHeaders.push(header);
navigateToURL(url_req, "png");
}
function onConvertFinished (evt:Event)
{
var mc = ByteConverter.content;
trace (ba);
mc.x = 0;
mc.y = 0;
mc.alpha = .75;
addChild (mc);
}
}
bt.addEventListener(MouseEvent.CLICK, convert);





header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
$image_data = $GLOBALS["HTTP_RAW_POST_DATA"] ;
$filename_to_save = "avatar.swf";
if(isset($image_data)){
$png_file = fopen($filename_to_save, "wb") or die("File not opened!");
if($png_file){
set_file_buffer($png_file, 20);
fwrite($png_file, $image_data);
fclose($png_file);
}
}

echo("
");
?>

четверг, 24 января 2008 г.

Интерпритатор для SSAS (Server-Side ActionScript)

Как то раньше не задумывался, а оказывается что SSAS родной брат JavaScript 1.5.
FlashCom Server использует Mozilla Spidermonkey JavaScript 1.5 интерпритатор.

Вместо main.asc можно писать main.js