lunedì 6 febbraio 2012

Utilizzare l'emulatore android su mac os x

Scaricare la sdk ed installarla.

Attraverso il terminale infilarsi nella cartella di installazione

cd /Users/%Nome del computer%/Public/android-sdk-mac_x86

Creare un profilo avd con il seguente comando

./android create avd -n mionome -t 2

Lanciare il simulatore

./emulator @mionome

Dopo aver atteso un bel pò di tempo tutto funziona (molto lentamente.. il confronto con il simulatore iphone è decisamente impietoso).

Fonte: Android Developer - Managing avds cmdline

mercoledì 10 agosto 2011

Symfony 2 e Mamp, prove di convivenza.

Installazione di Symfony 2

Scaricare il pacchetto e posizionarlo nella root di apache (solitamente htdocs).
fonte Symfony - The Big Picture

Configurazione di Mamp

Una volta inserito nella vostra directory il pacchetto di Symfony, nella pagina di config (http://localhost/symfony/web/config.php) potreste incorrere in questo messaggio:

Major problems have been detected and must be fixed before continuing : Upgrade your APC extension

Personalmente ho provato complicate soluzioni a linea di comando per attivarlo. Poi mi sono accorto che senza alcuna fatica APC si può attivare dal pannello preferenze di Mamp.

mercoledì 29 giugno 2011

Cocos 2D - gestione del tocco dell'utente, azioni e cambio di immagini dinamico.

Per gestire il "tocco" dell'utente è necessario aggiungere dei delegati tramite lo shareddispatcher ed il metodo addTargetedDelegate. SwallowsTouches se è impostato su true impedisce la propagazione degli eventi ad oggetti che sono posizionati al di sotto.

Fondamentale ricordarsi di richiamare i metodi super sia in entrata che in uscita altrimenti molte cose non funzioneranno come previsto.

-(void)onEnter {
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:TRUE];
[super onEnter];
}
In uscita è buona norma rimuoverlo attraverso il metodo removeDelegate.
-(void)onExit{
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
[super onExit];
}

Il set di azioni è tra gli strumenti più comodi che cocos2d fornisce. L'utilizzo è semplice e rapido.

martedì 24 marzo 2009

AS3: navigazione a frame e acesso ai figli.

Con la riscrittura di ActionScript c'è stato un sostanziale cambiamento sul come ActionScript interagisce con la timeline e con la navigazione a frame. Un esempio specifico riguarda la navigazione verso un nuovo frame con un movie clip interno a questo frame.

In as2 sarebbe stato sufficente scrivere qualcosa come:

target.gotoAndStop(10);
target.child._rotation = 90;

Dove il figlio del movie clip è un movie clip annidato nel frame 10 del target. Usando target.child._rotation = 90; il movie clip si sarebbe ruotato senza problemi.

Questo non è più possibile in ActionScript 3.

martedì 24 febbraio 2009

Heredoc, php e dreamweaver

Dreamweaver non colora il codice in maniera coretta se nel php si utilizza l'heredoc. La soluzione la fornisce un utente di Ultrashock.

  • Aprire il file: C:\Program Files\Macromedia\Dreamweaver 8\Configuration\CodeColoring\PHP.xml
  • Tra il tag <blockStart> e <blockEnd>, aggiungere:
    <blockStart doctypes="PHP_MySQL" scheme="customText"><![CDATA[HEREHTML;]]></blockStart><blockEnd><![CDATA[<<<HEREHTML]]></blockEnd>

Heredoc e html ora si colorano in maniera appropriata.

martedì 20 gennaio 2009

Align as3

Impostare l'allineamento in alto a sinistra e il noscale dell'swf è una esigenze ricorrente. Su Kirupa si può trovare la seguente document class:

package {
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class Test extends MovieClip {
public function Test() {
initStage();
}
private function initStage():void {
stage.align=StageAlign.TOP_LEFT;
stage.scaleMode=StageScaleMode.NO_SCALE;

stage.addEventListener(Event.RESIZE, resizeHandler);
}
private function resizeHandler(event:Event):void{
AppMain.x = (stage.stageWidth-AppMain.width)/2
AppMain.y = (stage.stageHeight-AppMain.height)/2
}
}
}

martedì 13 gennaio 2009

giovedì 4 dicembre 2008

Teorema di Pitagora e ActionScript

In un sistema cartesiano come quello di flash è possibile ottnere la distanza tra due punti utilizzando il teorema di Pitagora.

Teorema: La lunghezza della ipotenusa è pari alla radice della somma delle aree costruite sui due cateti.

In Flash ottenuti i 2 punti di partenza e i 2 punti di arrivo sull'asse x e sull'asse y si può procedere per ottenere la lunghezza della "linea di movimento" con il teorema.

Problema di esempio
La sfera è a x 10 e y 10.
La sfera deve andare a x 30 e y 46.
Quale è la distanza che intercorre tra i due elementi?

trace(calcolaDistanza(10, 30, 10, 46));

function calcolaDistanza(x1:Number, x2:Number, y1:Number, y2:Number):Number {
var distanzaX:Number = x2 - x1;
var distanzaY:Number = y2 - y1;
return Math.sqrt(distanzaX * distanzaX + distanzaY * distanzaY);
}

Soluzione
La soluzione è ottenere la distanza dei punti sull'asse x e sull'asse y. Una volta ottenuti si hanno i due cateti del triangolo. A quel punto applicare il teorema di pitagora per trovare l'ipotenusa.

venerdì 28 novembre 2008

Inerzia - Easing

Per ottenere un effetto inerzia: calcolare la distanza tra i due punti. L'oggetto che deve spostarsi si sposta a metà della distanza da percorrere. E poi di nuovo a metà della metà. E poi di nuovo. Fino a raggiungere un approsimazione prossima allo zero. Questo ovviamente in un enterFrame per ottenere l'animazione.

La formula generica che potrete facilmente memorizzare:
PassoSuccessivo=(DoveVoleteArrivare-DoveSieteAdesso)/ValoreInerzia;

da http://www.webmasterpoint.org/appunti/flash/83.asp

inerzia = 2;

palla_mc._x = 0
palla_mc._y = 200

var posPallaX:Number = this.palla_mc._x
var posPallaY:Number = this.palla_mc._y
var posMouse:Number = _root._xmouse

this.onEnterFrame = function () {
asseX()
asseY()
}

function asseX() {
//si calcola la distanza tra due punti e si fa andare la palla a metà poi ancora a metà della metà e così via
posMouse = _root._xmouse;
posPallaX = palla_mc._x;
distX = posMouse - posPallaX;
distXMeta = distX / 2;
palla_mc._x += distXMeta;
}

function asseY() {
posMouse = _root._ymouse;
posPallaY = palla_mc._y;
distY = posMouse - posPallaY;
distYMeta = distY / 2;
palla_mc._y += distYMeta;
}

martedì 26 agosto 2008

Problemi di sovrapposizioni

Per disabilitare l'interagire di elementi nei confronti del mouse:

contenitore.mouseChildren = false
contenitore.mouseEnabled = false

Dentro contenitore inserire l'elemento che si vuole disabilitare. Nel mio caso un campo di testo compariva sopra un bottone e in questo modo impediva il rollover del bottone stesso.

venerdì 18 luglio 2008

XML in AS 3

Esplorazione dell'xml

//"whitespace ignore" è di default
//per l'esplorazione è già tutto incluso, non serve realizzare cicli for per inserire i dati in un array: fa già tutto da solo.

trace(book.title) trace(book.authors.author[0])

Sintassi del doppio punto e dell'asterisco

//Permette di raggiungere un punto dell'xml senza specificarne il percorso completo. Con l'aggiunta dell'asterisco si possono esplorare determinati campi escludendo gli elementi parentali.

trace(book..author)
<author>
<firstname>Rich</firstname>
<lastname>Shupe</lastname>
</author>
<author>
<firstname>Zevan</firstname>
<lastname>Rosser</lastname>
</author>
trace(book..author.*)
<firstname>Rich</firstname>
<lastname>Shupe</lastname>
<firstname>Zevan</firstname>
<lastname>Rosser</lastname>

XML di esempio

<book>
<publisher name="O’Reilly"/>
<title>Learning ActionScript 3.0</title>
<subject>ActionScript</subject>
<authors>
<author>
<firstname>Rich</firstname>
<lastname>Shupe</lastname>
</author>
<author>
<firstname>Zevan</firstname>
<lastname>Rosser</lastname>
</author>
</authors>
</book>;

Fonti

  • Titolo: Learing ActionScript 3.0 A Beginners Guide
  • Editore: O'Reilly

Filtrare i dati xml (espansione 16 settembre 2009)

var categoria = datiXml..album.(description == chiave).preview
<preview>http://blog.makkiadesign.com/clienti/marras/ssp_director/p.php?a=XF9VXiM7PCoqQFtFPzU5Py47JjclOjoyKzclMzI%2BNzknIi0mOg%3D%3D&amp;m=1253001711</preview>
<preview>http://blog.makkiadesign.com/clienti/marras/ssp_director/p.php?a=XF9VXiM4MyIqQFtFPzU5Pi47JjclOjoyKzclMzI%2BNzknIi0mOg%3D%3D&amp;m=1253097804</preview>
<gallery>
<name>shop</name>
<album>
<id>184</id>
<name><![CDATA[shop_RDT454C-RT517B-735]]></name>
<description>abiti</description>
<preview>http://blog.makkiadesign.com/clienti/marras/ssp_director/p.php?a=XF9VXiM7PCoqQFtFPzU5Py47JjclOjoyKzclMzI%2BNzknIi0mOg%3D%3D&amp;m=1253001711</preview>
<date_taken/>
</album>
<album>
<id>185</id>
<name><![CDATA[shop_RDT_463C-RT513C-736]]></name>
<description>abiti</description>
<preview>http://blog.makkiadesign.com/clienti/marras/ssp_director/p.php?a=XF9VXiM4MyIqQFtFPzU5Pi47JjclOjoyKzclMzI%2BNzknIi0mOg%3D%3D&amp;m=1253097804</preview>
<date_taken/>
</album>
</gallery>

martedì 24 giugno 2008

Form

Gli elementi fondamentali di un form

Form
Da inizio al form
Fieldset
Gruppa una determinata serie di dati
Legend
Da un titolo a quell'insieme di dati
Label
Titola e rende acessibile una componente input
Input
Imposta uno spazio compilabile dall'utente
Type
Tipologia dello spazio compilabile (può essere un button oppure del testo etc)

Per la personalizzazione via codice articolo di "A List Apart": http://www.alistapart.com/articles/prettyaccessibleforms