Qual è l'approccio migliore per spostare un progetto preesistente da Flash 7/AS2 a Flex/AS3?

StackOverflow https://stackoverflow.com/questions/46136

Domanda

Ho una base di codice di grandi dimensioni destinata a Flash 7, con a quantità delle classi AS2.Spero di poter utilizzare Flex per qualsiasi nuovo progetto, ma molte novità nella nostra tabella di marcia sono aggiunte al vecchio codice.

La sintassi per AS2 e AS3 è generalmente la stessa, quindi sto iniziando a chiedermi quanto sarebbe difficile trasferire l'attuale codebase su Flex/AS3.So che tutte le cose relative all'interfaccia utente sarebbero incerte (attualmente l'interfaccia utente viene generata in fase di esecuzione con molte cose createEmptyMovieClip() e attachMovie()), ma le cose dell'interfaccia utente e del controller/modello sono per lo più separate.

Qualcuno ha provato a trasferire una grande codebase di codice AS2 su AS3?Quanto è difficile?In che tipo di insidie ​​sei incappato?Qualche consiglio sugli approcci per realizzare questo tipo di progetto?

È stato utile?

Soluzione

Alcuni problemi notevoli che ho riscontrato durante il tentativo di convertire un gran numero di classi AS2 in AS3:

Denominazione dei pacchetti

class your.package.YourClass
{
}

diventa

package your.package
{
    class YourClass
    {
    }
}

Sono necessarie le importazioni

È necessario importare esplicitamente qualsiasi classe esterna utilizzata: fare riferimento ad esse con il loro nome completo non è più sufficiente.

I metodi di interfaccia non possono essere etichettati come "pubblici"

Questo ha perfettamente senso, ma AS2 ti permetterà di farlo, quindi se ne hai dovranno essere rimossi.

Parola chiave esplicita "override".

Qualsiasi funzione che sovrascriva una funzione della classe genitore deve essere dichiarata con il comando oltrepassare parola chiave, proprio come C#.Allo stesso modo, se si hanno interfacce che estendono altre interfacce e ridichiarano funzioni, tali sostituzioni devono essere rimosse (di nuovo, come con pubblico, questa notazione non aveva comunque senso ma AS2 te lo permetteva).

Tutte le cose integrate in Flash sono cambiate

Hai accennato a questo sopra, ma è adesso display.flash.MovieClip invece che solo Un filmato, Per esempio.Ci sono molti dettagli in questa categoria e non sono andato abbastanza lontano per trovarli tutti, ma ci sarà molto fastidio qui.

Conclusione

Non sono riuscito a lavorare su questa conversione fino al punto di successo, ma sono riuscito in poche ore a scrivere un rapido strumento C# che gestisse ogni aspetto tranne il oltrepassare parola chiave.Automatizzare le importazioni può essere complicato: nel mio caso i pacchetti che utilizziamo iniziano tutti con alcuni pacchetti a livello di root, quindi sono facili da rilevare.

Altri suggerimenti

Prima di tutto, spero che tu non lo stia usando eval() nei tuoi progetti, poiché non esiste un equivalente in AS3.

Una delle cose che farei è passare attraverso Guida alla migrazione di Adobe (che è fondamentalmente solo un elenco dettagliato di ciò che è cambiato) elemento per elemento e prova a capire se ciascun elemento può essere modificato tramite una semplice operazione di ricerca e sostituzione (possibilmente utilizzando una regex) o se è più semplice modificare manualmente le occorrenze per corrispondere ad AS3.Probabilmente in molti casi (specialmente se, come hai detto, la quantità di codice da migrare è piuttosto elevata) sarà meglio scrivere le modifiche (ad es.utilizzando la ricerca e la sostituzione di espressioni regolari) e risolvendo manualmente eventuali casi limite in cui le modifiche automatizzate non sono riuscite.

Preparati a dedicare un po' di tempo al debugging e all'esecuzione di alcuni casi di test.

Inoltre, come altri hanno già menzionato, provare a combinare SWF AS2 con SWF AS3 non è una buona idea e non funziona nemmeno, quindi dovrai sicuramente migrare tutto il codice in un progetto contemporaneamente.

Ecco alcuni riferimenti aggiuntivi per il passaggio da AS2 ad AS3:

Slidedeck introduttivo del workshop AS3 di Grant Skinnershttp://gskinner.com/talks/as3workshop/

Lee Brimelow:6 motivi per imparare ActionScript 3http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

Colin Moock:Essential ActionScript 3 (considerato la "bibbia" per gli sviluppatori ActionScript):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

camere del microfono

mesh@adobe.com

La mia esperienza è stata che il modo migliore per migrare ad AS3 è in due fasi: la prima strutturalmente e la seconda sintatticamente.

Innanzitutto, esegui cicli di refactoring in cui rimani in AS2, ma avvicinati il ​​più possibile all'architettura AS3.Naturalmente questo include lo spostamento di tutti gli script dei frame e gli script #include in pacchetti e classi, ma puoi fare cose più sottili come modificare tutti i tuoi ascoltatori e dispatcher di eventi per seguire il flusso AS3 (usando proprietà di classe statiche per i tipi di eventi e registrando tramite metodo piuttosto che per oggetto).Ti consigliamo inoltre di sbarazzarti di tutti gli eventi "integrati" (come onEnterFrame) e di dare un'occhiata da vicino all'interazione non banale del mouse (come il trascinamento) e all'interazione con la tastiera (come rilevare se viene premuto un tasto).Questa fase può essere eseguita in modo incrementale.

La seconda fase consiste nel convertire da AS2 a AS3, cambiando "_x" in "x" e tutte le API e così via.Questo non può essere fatto in modo incrementale, devi semplicemente fare tutto il possibile in un colpo solo e poi iniziare a correggere tutti gli errori di compilazione.Per questo motivo, più puoi fare nella prima fase, più dolore eviterai nella seconda fase.

Questo processo ha funzionato per me su un progetto ragionevolmente grande, ma dovrei notare che la prima fase richiede una solida conoscenza di come è strutturato AS3.Se sei nuovo a AS3, probabilmente dovrai provare a creare alcune delle funzionalità di cui avrai bisogno per il porting.Ad esempio, se il tuo codice legacy utilizza le destinazioni di trascinamento, ti consigliamo di provare a implementarlo in AS3 per capire come il tuo codice dovrà cambiare strutturalmente.Se poi esegui il refactoring del tuo AS2 tenendo presente questo, le modifiche finali della sintassi dovrebbero procedere senza intoppi.

Le insidie ​​​​più grandi per me erano le parti che implicavano molto allegare, duplicare e spostare i MovieClip, modificarne la profondità e così via.Tutta quella roba non può davvero essere riprogettata per assomigliare ad AS3;devi semplicemente incorporare tutto nel nuovo modo di pensare e poi iniziare a correggere i bug.

Un'ultima nota: non mi preoccuperei davvero di cose come l'importazione e l'override delle istruzioni, almeno non al punto da automatizzarle.Se ne perdi qualcuno, verrà rilevato dal compilatore.Ma se perdi problemi strutturali, avrai molti più dolori.

La migrazione di un progetto più grande come questo da as2 sarà più di una semplice ricerca e sostituzione.La nuova sintassi è abbastanza simile e semplice da adattare (come menzionato da lilserf), ma se non altro il fatto che as3 è più rigido e il nuovo modello di eventi probabilmente causerà molti problemi.Probabilmente starai meglio riscrivendo più o meno quasi tutto da zero, possibilmente usando il vecchio codice come guida.

Tuttavia, la migrazione da as2 -> as3 in termini di conoscenza è abbastanza semplice.Se conosci l'orientamento agli oggetti as2, passare ad as3 non sarà affatto un problema.

Non devi comunque utilizzare mxml per la tua interfaccia utente a meno che tu non lo desideri specificatamente.Mxml fornisce semplicemente un modo rapido per creare l'interfaccia utente (ecc.), ma se vuoi farlo da solo con ActionScript non c'è niente che ti fermi (probabilmente sarebbe anche più semplice se avessi già quell'interfaccia utente nel codice as2).Flex (Builder) è solo un modo rapido per fare cose che potresti non voler fare da solo, come costruire l'interfaccia utente e associare dati, ma essenzialmente si tratta solo di creare una parte del file .swf per te: non c'è magia in questo ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top