Les images au format PNG sont trés pratiques lorsqu'il s'agit d'afficher des formes avec un fond transparent.
sait les importer depuis bien longtemps, mais ne permet pas de détecter les pixels morts de manière automatique! En d'autres termes, si un évenement souris est attaché à un objet qui contient une image transparente, toute la zone de l'image sera prise en compte (transparence inclus).

Le problème a été résolu par MosesSupposes avec sa classe InteractivePNG, en placant un évenement ENTER_FRAME qui détecte les collisions de la souris avec la le canal alpha de l'image! bien vu...

Exemple:

This movie requires Player 9

Implémentation:

private function init():void {
	var l:Loader =  new Loader();
	var r:URLRequest = new URLRequest("http://www.domain.com/image.png");
	l.load(r);
	l.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
}
 
private function onLoaded(evt:Event):void {
	var iP:InteractivePNG 	= new InteractivePNG();
	iP.addChild(evt.currentTarget.loader.content);
	addChild(iP);
}
 

Source de l'exemple: télécharger!



  1. Armetiz on mercredi 01 juillet, 2009

    Sympa à connaitre cette class ;)
    Welcome on board ;)

  2. Erwan on mercredi 01 juillet, 2009

    Merci!
    C’est vrai que c’est bien pratique… et surtout extremement bien codé!

  3. Daweed on mercredi 01 juillet, 2009

    Sympa.

    Par contre je m’interroge sur l’enterframe qui est lancé ( pour les objets en mouvement par exemple ). Est ce qu’en dessinnant une fois une shape apres le loading (sur le meme principe de collision ) et mettre l’event sur la shape ne serait pas plus optimisé… a voir..

  4. Erwan on mercredi 01 juillet, 2009

    En fait, si j’ai bien compris la source, l’evenement enterframe sert juste a tracker la position du curseur sur un bitmap crée à partir d’un PNG. C’est donc a priori pas si mal optimisé!
    De plus, MosesSupposes n’est pas du genre à liberer son code s’il n’est pas nikel…

  5. Orper on mercredi 01 juillet, 2009

    Ah ouai cool ça dis dont !
    Merci