web-dev-qa-db-fra.com

Flash CS4 refuse de se laisser aller

J'ai un projet Flash, et il a beaucoup de fichiers source. J'ai une classe assez utilisée, appelez ça Jenine. J'ai récemment (et peut-être avec insistance) déplacé Jenine d'un espace de noms à un autre. Je pensais que nous étions prêts - je pensais que le moment était venu. La nouvelle Jenine était meilleure à tous points de vue - elle avait perdu un peu de code, elle s'était séparée de quelques relations de classe restantes, et elle était enfin revenue à la maison dans un espace de noms qu'elle avait toujours secrètement su dans son cœur. appartenu à. Elle était parmi les siens.

Malheureusement, Flash n'aurait rien de tout cela. Peut-être avait-il formé un attachement. Peut-être que ce n'était pas vouloir Jenine à découpler. Quoi qu’il en soit, il restait fidèle à l’ancienne version parfaite de Jenine. Il a refusé de passer à autre chose. Il a ignoré ses appels (de 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. En fin de compte, dans une crise de rage, j'ai supprimé complètement toutes les références à Jenine. Elle a été 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 encore à la mémoire de Jénine. Ses définitions anciennes et imparfaites traversent encore mon projet comme des fantômes abandonnés. À chaque fois que je force Flash à compiler, il l'insère toujours avec amour dans mon film, insérant sa définition parmi d'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. Summer, une nouvelle fille de la ville, semble presque identique à Jenine, comme si quelqu'un venait de copier son code source en gros dans une nouvelle classe, mais Flash ne montre aucun intérêt. La plupart du temps, il se morfond et écrit de la mauvaise poésie dans mes commentaires lorsqu'il pense que je ne cherche pas.

J'espère que personne d'autre n'a vécu une expérience similaire, qu'il ne s'agit que d'une ondulation singulière et douloureuse dans l'horrible lagon sombre qu'est la base de code Flash. Est-ce que quelqu'un a une idée de comment effacer le cache utilisé par le compilateur?

2730
Ender

Flash contient toujours le fichier ASO, qui est le code octet compilé pour vos classes. Sous Windows, vous pouvez voir les fichiers ASO ici:

C:\Documents and Settings\username\Local Settings\Application Data\Adobe\Flash CS4\en\Configuration\Classes\aso

Sur un Mac, la structure de répertoires est similaire dans /Users/username/Library/Application Support/


Vous pouvez supprimer ces fichiers manuellement ou en Flash, vous pouvez sélectionner Control->Delete ASO files pour les supprimer.

699
wpjmurray

Essayez de supprimer vos fichiers ASO.

Les fichiers ASO sont des versions compilées en cache de vos fichiers de classe. Bien que IDE soit beaucoup mieux pour abandonner 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 aussi la cause du bogue "Je ne suis pas en train de voir mes changements, alors laissez-moi-ajouter-une-trace-maintenant-tout-fonctionne" qui a été introduit dans CS3.

198
Magocto

Et si vous le compiliez en utilisant une autre machine? Une nouvelle installée serait ravissante. J'espère que votre machine n'est pas jaloux.

164
Rodrigo Strauss

J'ai trouvé un comportement lié qui pourrait aider (cela ressemble à votre problème spécifique est plus profond):

Flash vérifie si un fichier source doit être recompilé en examinant les horodatages. Si sa version compilée est plus ancienne que le fichier source, il sera recompilé. 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.

125
Laurie Cheers

Aussi, pour utiliser votre nouvelle classe namespaced, vous pouvez aussi faire

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()
103
Arpit

Avez-vous plusieurs fichiers swf? Si votre classe est importée dans l'un des fichiers swf, les autres fichiers swf utiliseront également la même version de la classe. Une ancienne importation avec * dans un swf le fera. Recompiler tout et voir si cela fonctionne.

97
Dave

Utilisez un analogue grep pour rechercher les chaînes oldnamespace et Jenine dans les fichiers de l'ensemble du dossier de votre projet. Ensuite, vous saurez quelle étape faire ensuite.

11
Ark-kun