Archive

Articles taggués ‘snippet’

Et boum !

12/12/2007 un commentaire

Un petit crash du player 9 !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package net.tynambule.exp {
	import flash.display.MovieClip;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.display.Loader;
	[SWF(backgroundColor="#ffffff", frameRate="250", width="100", height="100")]
	public class MovieClipSpriteTest extends Sprite
	{
		public function MovieClipSpriteTest()
		{
			var l : Loader = new Loader();
			l.contentLoaderInfo.addEventListener(Event.INIT, onLoadInit);
			// Un SWF Flash 9/AS3 avec "Document class" défini à "MobileSprite"
			l.load(new URLRequest("swfexterne.swf"));
		}
		private function onLoadInit(e : Event) : void
		{
			var MobileSprite : Class = (e.target as LoaderInfo).applicationDomain.getDefinition("MobileSprite") as Class;
			var instance : MovieClip = new MobileSprite() as MovieClip;	// KA-BOOM
			this.addChild(instance);
		}
	}
}

Ce code fonctionne très bien si l’on utilise l’option « Linkage » d’un clip dans la bibliothèque, mais crash lamentablement si on place directement nos éléments sur la scène et que l’on défini une « Document class ». À noter que c’est l’instanciation de la classe récupérée qui foire, et non pas sa récuperation. Si l’on fait un describeType sur MobileSprite dans le code ci-dessus avant de créer l’instance, le retour est normal, il s’agit bien d’une classe qui étend bien MovieClip.

C’est pô bô. Allez, salut.

Categories: Code Tags: ,

La métadonnée Embed en AS3

06/12/2007 3 commentaires

Il y a peu, le monde merveilleux de l’ActionScript 3 s’est ouvert à moi. Même si certaines choses sont un peu déroutantes, ayant parcouru un très long chemin en AS2 (raah, l’absence de constructeurs private/protected! Enfoirés de l’ECMA, laissez tomber cet héritage par prototype à la con!), certaines des nouvelles fonctionnalités tuent carrément.

Un truc qui m’avait toujours gonflé en AS2, c’est la liaison entre les assets et le code. Je codais sous Eclipse en compilant avec MTASC, et je modifiais mes assets sous Flash. Seulement, histoire de pouvoir les associer à une classe, je devais, au choix, mettre ma classe sous Flash (et me taper une compilation AS par Flash d’environs 30 minutes), ou faire une grosse méthode bourrine à coup de Object.registerClass.

C’était, avouons-le, pas super beau. Mais désormais, en AS3, les gens d’Adobe ont rajoutés des métadonnées merveilleuses qui permettent de faire ça tout seul, et bien plus encore.

Lire la suite…

Categories: Code Tags: , ,

Récuperation de l’ID d’une instance d’objet

02/11/2007 Aucun commentaire

Depuis PHP 5.2, il n’est plus possible de récupérer l’ID interne d’un objet via un cast en string sans avoir implémenté de méthode __toString sur ledit objet.

Ancienne méthode:

1
2
3
4
5
6
7
class foo {
    public function __construct() {
        echo "Hi, it's me!";
    }
}
$bar = new foo();
print $bar;

Auparavant, ce snippet renvoyait l’ID interne de l’objet. Désormais, et c’est plus propre comme ça, il lance une erreur fatale récuperable (« Catchable fatal error: Object of class foo could not be converted to string in filename on line n« ). Mais du coup, on perd un moyen simple et efficace de savoir à quelle instance d’un objet on a affaire, ce qui peut être très utile dans un processus de debug.

Fort heureusement, les gentils monsieurs de PHP ont implémenté une fonction qui permet de refaire la même chose: spl_object_hash() ! Hé ben voilà, le monde est sauvé. Allez, salut.

Categories: Code Tags: ,

Sauvegarder l’état d’un objet

30/10/2007 Aucun commentaire

En nos temps où l’orienté-objet est roi, un schéma de fonctionnement revient régulièrement :

Un objet dont chaque instance correspond à une ligne en base. On charge les données lors de l’initialisation de l’objet (dans son constructeur), puis on les sauvegardes lorsque l’on a fini de les modifier.

La problématique est la suivante : mais quand a-t-on fini de les modifier? Dans 99% des cas, « ça dépend« . Les méthodes pour implémenter cette notion sont légions: une méthode genre save que l’on appelle « à la fin« , une sauvegarde systématique à chaque modification, et la rationnelle mais risquée sauvegarde dans le destructeur de l’objet.

Cette dernière méthode semble la plus intéressante, puisqu’elle défini avec une presque certitude la notion de « fin » de modifications. Toutefois, dans notre contexte orienté objet, il y a de fortes chances que l’on utilise un objet pour se connecter à la base de donnée. Et cet objet fermera probablement sa connexion dans le destructeur. Et comment savoir que la base est encore connectée lors de l’exécution du destructeur de notre objet de données? C’est le drame.

Lire la suite…

Categories: Code Tags: ,

Moteur 3D sous Flash

12/11/2006 un commentaire

Il y a longtemps, en octobre 2003 (fichtre… un coup de vieux…), j’avais codé un petit moteur 3D en AS1, permettant d’afficher des wireframes d’objets à partir d’un fichier XML.

J’ai repris le même principe pour cette note, mais en recodant la classe en AS2, parce que quand même, c’est plus mieux. J’en ai également profité pour coder un petit exporteur pour 3D Studio Max afin d’afficher des objets plus complexes. Un exemple en image:

[NdT: A pu :( ]

Cette petite démo n’existe pas tant pour l’aspect que pour la technique de calcul et de rendu. Elle intègre notament la multiplication de matrices, et le rendu est fait sur le principe Vertex Buffer/Index Buffer cher à nos cartes graphiques, sans pousser toutefois le vice jusqu’à nécessiter des primitives triangulaires.

Lire la suite…

Categories: Code Tags: ,