Flash et bugs : switch/case et variables de type XML

Bonjour les amis, aujourd'hui un bug tout en subtilité sur lequel je suis tombé hier :

Conditions :

  • Vous êtes à l'intérieur d'une clause switch/case
  • Vous voulez déclarer une variable de type XML ou XMLList et lui affecter une valeur sur une même ligne

Bingo, le contenu de la variable sera null ...

Exemple :

switch(condition)
{	
  case 0:
  var content:XML = xmlListObject.node.(@id == id)[0]; // l'expression renvoie bien un noeud XML
  trace(content); // -> null
  break;

  case 1:
  ...
}

Solution :

Très simple à résoudre, il suffit de déclarer puis affecter la valeur en 2 temps :

switch(condition)
{	
  case 0:
  var content:XML;
  content = xmlListObject.node.(@id == id)[0];
  trace(content);
  break;

  case 1:
  ...
}

Voilà, simple et efficace. Merci à ce billet pour avoir trouvé la solution, à Fred pour avoir trouvé ce billet, et visiblement à Adobe pour avoir corrigé le souci dans la dernière version du player (la page du bug sur Jira est ici).

Flash et bugs : Mozilla, wmode et champs de saisie

J'inaugure aujourd'hui une nouvelle rubrique consacrée aux bugs de Flash (oui ça mérite bien une rubrique à part entière).

Pour commencer, un bug malheureusement assez connu et très ennuyeux, qui perdure depuis Flash 6 et toujours pas vraiment résolu à ce jour : le bug "du wmode". Pour les chanceux qui ne seraient pas encore tombés dessus, voici une démonstration.

Conditions :

  • Vous êtes sur Firefox, Safari ou Opera, sur Windows uniquement
  • Vous n'êtes pas américain et votre clavier n'est pas en configuration qwerty US
  • Vous avez une animation flash avec le paramètre wmode reglé sur "transparent" (pour pouvoir superposer des éléments html)
  • Vous avez un champ de saisie

Si vous réunissez ces conditions, bravo, vous vous rendez compte que vous ne pouvez pas taper le caractère "@", "?" ou bien un chiffre de la rangée haute (les chiffres du pavé numériques fonctionnent). Plutôt gênant par exemple quand vous devez saisir une adresse email.

Solutions possibles :

  • Attendre la saint glinglin qu'Adobe se bouge les fesses (le rapport de bug est ici)
  • Prévenir votre client du souci le plus en amont possible (ne vous inquietez pas, votre client adore entendre ce genre de justification technique)
  • Essayer un des hacks proposés ici, ici, ou encore , principalement à base de javascript à la rescousse.

Pour aller plus loin...

Le souci vient en fait des deux cotés, Adobe et Mozilla, comme on peut le voir dans cette discussion. Voir notamment les messages de Masayuki Nakano pour Mozilla, et Jeff Mott pour Adobe.

En résumé, un correctif vient d'être intégré récemment dans le lecteur Flash pour qu'il supporte correctement les entrées clavier unicode, et on attend maintenant la prochaine release de Firefox pour les corrections coté Mozilla. Je viens de tester avec Firefox 3.5 et ça fonctionne effectivement mais seulement à partir du deuxième caractère saisi (!). Bref, c'est pas encore trop ça mais ils y travaillent. À suivre donc...

3D isométrique et pathfinding

Voici quelques temps que je voulais me mettre au développement de jeux en Flash, je me suis donc confronté récemment à la réalisation d'un moteur 3D isométrique. Je me suis notamment intéressé à la génération et au positionnement des "tiles" et des différents objets de la carte, ainsi qu'à la gestion du pathfinding, c'est à dire le déplacement des objets sur la carte en tenant compte des obstacles.

Lire la suite...

Chargement dynamique de polices avec Flash et Actionscript 3

Ayant eu récemment besoin de faire ce genre de choses sur un projet, voici un tutoriel sur le chargement dynamique de polices de caractères en Actionscript 3. Ceci peut être particulièrement utile dans le cas par exemple de sites multilingues comportant des langues asiatiques, les polices de caractères chinoises ou japonaises pouvant être particulièrement lourdes à charger...

Lire la suite...

Du nouveau du coté de l'intégration Flash

Après avoir réglé son différent avec Eolas et conclu un accord "à l'amiable", Microsoft a décidé de supprimer l'avertissement d'activation pour les contenus Active X dans Internet Explorer. La mise à jour, prévue pour avril 2008 (!) nous fera donc enfin oublier le message "Cliquez ici pour activer et utiliser ce contrôle" sur les animations Flash.

Pendant ce temps, le développement de SWFObject se poursuit, Geoff Stearns travaille désormais avec Bobby van der Sluis et Michael Williams d'Adobe sur SWFObject 2.0, qui deviendra la méthode standard d'intégration Flash préconisée par Adobe. SWFObject 2 sera donc le successeur désigné de SWFObject, UFO et du Flash player detection kit d'Adobe. La beta 6 est actuellement disponible sur Google Code.

Classe principale en Actionscript 2

La possibilité dans Flash CS3 de pouvoir spécifier une classe principale pour son application, ça donne envie de pouvoir faire la même chose en Actionscript 2/Flash 8 .

Pas de souci, voici le code de la classe :

class Application extends MovieClip{
	
	public function Application(){
		//...
	}
	
	public static function main(target:MovieClip):Void {
		target.__proto__ = Application.prototype;
		Function(Application).apply(target, null);
	}
	
}

Oui alors bon il reste quand même une ligne de code à placer sur la première frame dans le FLA:

Application.main(this);

Voilà, c'est tout. La méthode main permet dans un premier temps, de spécifier le niveau 0 du swf comme une instance de la classe Application (this dans notre classe fera donc bien référence à _root). La deuxième ligne permet ensuite d'appeler le constructeur.

Astuce trouvée via Danny Patterson et BIT-101

Sloppy, le simulateur de modem 56k

Sloppy est un petit logiciel bien pratique, puisqu'il permet de simuler une bande passante réduite. Ça permet par exemple de tester son site en local, dans son navigateur habituel, à la vitesse d'une connexion 56k ou autre (les choix vont de 9,6 à 512k).

C'est particulièrement utile pour un site flash avec beaucoup de chargements asynchrones, cela permet de vérifier que ceux-ci se font correctement dans un environnement "réel", contrairement au mode "Simuler le téléchargement" disponible dans Flash.

Sloppy est une application Java, disponible donc sur Windows, Mac OS X et Linux.

Sloppy

Red5 : installation sous Mac OS X

- page 1 de 2