the shortnest php to flash via json

05/12/2009 - autor: riasol

php:

$v=array();
$v['foo']='bar';
return json_encode($v);

as – on complete:

if(ExternalInterface.available) {
var encoded:Object=ExternalInterface.call('eval','('+URLLoader(e.currentTarget).data+')')
}

xml parsing error trapping in libxml

11/11/2009 - autor: riasol

zmodyfikowany przykład z dokumentacji php. Oryginalny kod na windows nie pokazywał w której linii/kolumnie jest błąd – problem z końcami linii

public function validateXml($inStr){
libxml_use_internal_errors(true);
$inStr=preg_replace("/\r/","\n",$inStr);
$doc = simplexml_load_string($inStr);
$xml = split("\n", $inStr);
$ret=false;
if (!$doc) {
$ret='';
$errors = libxml_get_errors();
foreach ($errors as $error) {
$ret.= $this->formatXmlError($error, $xml);
}
libxml_clear_errors();
}
return $ret;
}
private function formatXmlError($error, $xml)
{
$return = $xml[$error->line - 1] . "\n";
$return .= str_repeat('-', $error->column) . "^\n";

switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= “Warning, code $error->code: “;
break;
case LIBXML_ERR_ERROR:
$return .= “Error, code $error->code: “;
break;
case LIBXML_ERR_FATAL:
$return .= “Fatal Error, code $error->code: “;
break;
}

$return .= trim($error->message) .
“\n Line: $error->line” .
“\n Column: $error->column”;

if ($error->file) {
$return .= “\n File: $error->file”;
}

return “$return\n”.str_repeat(‘.’, 40).”\n\n”;
}

explorer 8 stage.stageHeight fix

21/10/2009 - autor: riasol


package flashprolib.fix {
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.utils.Timer;

/**
* Poprawka bedu występującego w iexpore 8: stage.stageWidth ( stage.stageHeight ) ma wartość 0
* przy korzystaniu z swf zapisanego w cache
*/
public class IEStage extends Sprite {
private var handle:Function
private var tmr:Timer;
/**
* @param container DisplayObjectContainer do którego dołączony zostanie fix
* @param method Function metoda która zostanie wywołana po zaistnieniu wartości stageWidth>0
* Using:
* var fix:IEStage=new IEStage(this,startDisplayObejcts)
*/
function IEStage(container:DisplayObjectContainer, method:Function) {
handle=method
container.addChild(this)
tmr=new Timer(20)
tmr.addEventListener(TimerEvent.TIMER, testStageSize)
tmr.start()
testStageSize()//wywołanie, które zadziała dla browser != ie8, żeby nie było opóźnień
}
private function testStageSize(e:TimerEvent=null):void {
if(stage.stageWidth > 0 && stage.stageHeight > 0) {
tmr.removeEventListener(TimerEvent.TIMER, testStageSize)
handle.apply(parent)
parent.removeChild(this)
}
}
}
}

locale, mxmlc, ant

18/10/2009 - autor: riasol

Kroki niezbędne do kompilacji projektu

  1. We FLEX_SDK_HOME/bin: copylocale.exe en_US pl_PL
  2. Zakładając standardowy projekt flexbuildera,  *.properties w katalogu src/locale/pl_PL. Parametry mxmlx -source-path+=${workspace}/${ant.project.name}/src/locale/{locale}  -locale pl_PL lub -locale=en_US,pl_PL

configuration variable ‘target-player’ must only be set once

24/07/2009 - autor: riasol

Frustrujący komunikat flexbuildera. Powodem był forma zapisu opcji w .actionScriptProperties

winno być -target-player=10 zamiast -target-player 10 .

flex componets lifecycle- niezwykłości

02/07/2009 - autor: riasol

removed before created ;)

container generuje zdarzenia Event.REMOVED_FROM_STAGE w trakcie tworzenia, prawdopodobnie przy sprawdzaniu scrollbars. Tak więc nie wolno w mxml ustawić chandlerów creationComplete i removedFromStage gdyż drugi wywoła się wcześniej, można np. w as w chandlerze  creationComplete dodać manualnie obsługę Event.REMOVED_FROM_STAGE

ref: http://jonathanbranam.net/book/export/html/1

Ogólne rozwiązanie może wynikać z przypadków uzycia obsługi _REMOVED_FROM_STAGE – zazwyczaj to czyszczenie pmięcie przy usuwaniu elementu z widzianych elementów. Można więc zastosowac algorytm, że przed prawdziwym usunięciem ustawia się z zewnątrz flage  i tylko wówczas w ciele metody obsługi zdarzenia wykona się blok kodu. Dla ModuleLoader bedzie to taki pseudokod:

//loader jest instancją ModuleLoader, BaseModule to klasa rozszerzająca Module

if(loader.child is BaseModule){
BaseModule(loader.child).unloading=true
}

//w obsłudze REMOVED_FROM_STAGE w klasie rozszerzającej BaseModule

if(unloading){//wykonaj blok

}

użycie swf z flash ide w actionscript – uwagi

02/07/2009 - autor: riasol
  1. Podwójna instancja obiektu na timeline w jedenej klatce może spowodować że w kolejnej klatce nie można uzyskać odniesienia do obiektu o takiej samej nazwie.

flasplayer10 3d

09/06/2009 - autor: riasol

flash-3d_basic

Model 3d w fp

punkt zanikania jest ustawiany raz – przy starcie, przy zmianach rozmiaru filmu trzeba go ekstra ustawiać

root.transform.perspectiveProjection.projectionCenter=new Point(stage.stageWidth/2,stage.stageHeight/2);

flexbuilder3 kompiluje przy użyciu flex sdk4.0 beta

tester możliwości 3d

flash player debugger na ubuntu

02/06/2009 - autor: riasol

Dla testu postanowiłem zainstalować flashplayer na ubuntu. Nie znalazłszy pakietu pobrałem archimum z adobe i skopiowałem bibliotekę *.so do /usr/lib/flashplayer-installer

ExternalInterface – tworzenie javascript w actionscript

23/05/2009 - autor: riasol

Można więcej w actionscript. Zamiast pisać równolegele w javascript możliwe jest stworzenie kodu js z wnętrza swf. np.

if(ExternalInterface.available) {
ExternalInterface.call('document.insertScript=function(){window._getTitle=function(){' +
'return document.title;' +
'};}')
}

Najważniejsze jest wywołanie ..document.insertScript… – jest to używcie metody, która tworzy nową metodę w DOM oszadzającego dokumentu. Sprawdzone we flex