J'ai un projet Flash et il contient de nombreux fichiers source. J'ai une classe assez utilisée, appelez-la Jenine. J'ai récemment (et peut-être calleusement) déplacé Jenine d'un espace de noms à un autre. Je pensais que nous étions prêts - je pensais qu'il était temps. La nouvelle Jenine était meilleure à tous points de vue - elle avait perdu un peu de code, elle s'était dissociée de quelques relations de classe résiduelles et elle était enfin rentrée à la maison dans l'espace de noms qu'elle avait toujours secrètement connu dans son cœur était celui qu'elle avait vraiment appartenu à. Elle faisait partie de son espèce.
Malheureusement, Flash n'aurait rien de tout cela. Peut-être qu'il avait formé un attachement. Peut-être ne voulait -il pas que Jenine soit découplée. Quoi qu'il en soit, il s'est accroché à l'ancienne version parfaite de Jenine dans sa mémoire. Il a refusé de continuer. Il a ignoré ses appels (fonction). Il a essayé d'oublier ses nouvelles interfaces publiques. Au lieu de cela, chaque instance de Jenine qu'il a construite était toujours une copie de l'ancienne version, jusqu'à son chemin de classe:
var jenineInstance:Jenine = new Jenine();
trace( getQualifiedClassName(jenineInstance));
// Should print: com.newnamespace.subspace::Jenine
// Prints: com.oldnamespace.subspace::Jenine
// Ah, young love!
Nous nous sommes battus. Je ne suis pas fier de certaines des choses que j'ai dites ou faites. Au final, dans une crise de rage, j'ai complètement supprimé toutes les références de Jenine. Elle était complètement, complètement effacée du système. Mon curseur est tombé sur l'option de menu "Vider la corbeille" comme le couvercle froid d'un cercueil.
Je ne pense pas que Flash ait jamais récupéré. À ce jour, il reste accroché à la mémoire de Jenine. Ses vieilles définitions imparfaites flottent toujours dans mon projet comme des fantômes abandonnés. Chaque fois que je force Flash à compiler, cela l'insère toujours avec amour dans mon film, nichant sa définition parmi les autres classes vivantes, comme un petit sanctuaire. Je me demande s'ils peuvent la voir.
Flash et je ne parle plus vraiment. J'écris mon code, il le compile. Il y a une nouvelle fille en ville nommée Summer qui ressemble presque à Jenine, comme si quelqu'un venait de copier son code source en gros dans une nouvelle classe, mais Flash n'a montré aucun intérêt. La plupart du temps, il ne fait que se morfondre et écrit de la mauvaise poésie dans mes commentaires quand il pense que je ne regarde pas.
J'espère que personne d'autre n'a eu une expérience similaire, que ce n'est qu'une ondulation singulière et douloureuse dans l'horrible lagon sombre qu'est la base de code Flash. Quelqu'un sait-il comment effacer le cache utilisé par le compilateur?
Essayez de supprimer vos fichiers ASO.
Les fichiers ASO sont des versions compilées mises en cache de vos fichiers de classe. Bien que l'EDI soit bien meilleur pour lâcher les anciens caches lorsque des modifications sont apportées, vous devez parfois les supprimer manuellement. Pour supprimer des fichiers ASO: Contrôle> Supprimer les fichiers ASO.
C'est également la cause du bogue «Je ne vois pas mes changements donc laissez-moi ajouter une trace maintenant tout fonctionne» qui a été introduit dans CS3.
la source
Et si vous le compilez sur une autre machine? Un nouveau installé serait charmant. J'espère que votre machine n'est pas jalouse.
la source
J'ai trouvé un comportement connexe qui peut aider (semble que votre problème spécifique soit plus profond cependant):
Flash vérifie si un fichier source doit être recompilé en regardant les horodatages. Si sa version compilée est plus ancienne que le fichier source, il se recompilera. Mais il ne vérifie pas si la version compilée a été générée à partir du même fichier source ou non.
Plus précisément, si vos fichiers actionscript sont sous contrôle de version et que vous annulez une modification, le fichier annulé aura généralement un horodatage plus ancien et Flash l'ignorera.
la source
De plus, pour utiliser votre nouvelle classe d'espaces de noms, vous pouvez également faire
la source
Avez-vous plusieurs fichiers swf? Si votre classe est importée dans l'un des swf, les autres swf utiliseront également la même version de la classe. Une ancienne importation avec * dans un swf le fera. Recompilez tout et voyez si cela fonctionne.
la source
Utilisez un
grep
analogue pour trouver les chaînesoldnamespace
etJenine
à l'intérieur des fichiers dans l'ensemble de votre dossier de projet. Vous saurez alors quelle étape faire ensuite.la source