Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69

    Implementare questo effetto "typewriter"

    ho acquistato un testo di script vari per flash ( Flash, trucchi e segreti; Sham Bhangal. O'Reilly).
    Sul sito dell'editore http://www.oreilly.com/
    consentono di scaricare una parte degli script pubblicati sul testo.
    Quello che interessa a me per l'appunto è uno con che riproduce l'effettto macchina da scrivere.
    Lo script funziona bene, ma non consente di andare a capo. Anche se al testo dinamico applico l'opzione multiriga.

    E' possibile secondo voi, partendo da questo script aggiungere questa possibilità?
    Se sì, come fare?

    Agiungo. E' possibile regolare la spaziatura fra le lettere? Ci ho provato ma non ci sono riuscito.


    Ecco lo script in questione:
    in rosso c'è il contenuto del testo

    function typewriter(target:MovieClip, delay:Number):Void {
    target.interval = function() {
    target._visible = true;
    keyHit.start(0, 1);
    clearInterval(target.intervalID);
    };
    target.intervalID = setInterval(target, "interval", delay);
    target._visible = false;
    }
    function placeText(target:MovieClip, x:Number, y:Number, banner:String, tFormat:TextFormat):Void {
    // For each character...
    for (var i = 0; i<banner.length; i++) {
    // Create a clip and place the current
    // character of the text field inside it.
    var char:MovieClip = target.attachMovie("letter", "char"+i, target.getNextHighestDepth());
    char.field.text = banner.substr(i, 1);
    char._x = x;
    char._y = y;
    // Add the width of the current text character to the
    // next letter's x position.
    x += tFormat.getTextExtent(char.field.text).width;
    //
    // Here is the effect call.
    var timer = i*200+Math.round(Math.random()*200);
    typewriter(char, timer);
    }
    }
    var keyHit = new Sound(this);
    keyHit.attachSound("typeClick");
    var format:TextFormat = new TextFormat();
    format.font = "Arial";
    format.size = 24;
    placeText(this,100,100,"This is a text effect .",format);


    ciao

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    l'accapo deve essere dato nella stringa... in pratica nei punti dove dovrebbe andare l'accapo bisogna scrivere \n

    ps. bisogna impostare sia il multiline che il wordWrap entrambi a "true"

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    ti ringrazio per il consiglio

    Mi vergogno un po' a chiedertelo ma mi spieghi meglio come
    impostare sia il multiline che il wordWrap entrambi a "true"
    E' un'azione che devo applicare all'interno del MC contenente il testo dinamico o la devo aggiungere allo script che ho riportato sopra?

    Questa azione in che forma deve essere espressa?

    So bene che è una domanda scema, e che la risposta dovrebbe essere la base per lavorare in Flash.
    Purtroppo sono in quella triste fase in cui si pesca un po' di qua e po' di là in maniera disorganica. E i buchi sono tanti.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    credo di essere stato un po' precipitoso nel consiglio, ma non avevo flash a disposizione e non potevo leggere correttamente il codice, ora l'ho letto e ho notato che in pratica per ogni lettera del testo viene attaccato dalla libreria un clip che contiene un campo di testo in cui ci sta una sola lettera per volta, quindi la posizione viene calcolata sempre in base alla posizione del clip attaccato in precedenza... si potrebbe implementare un'interruzione di riga che mandi accapo il testo quando l'interruzione viene intercettata... ora è un po' tardi però... facciamo che ci si pensa domani

    riguardo al wordWrap e al multiline, sono due impostazioni dei campi di testo che vengono attivate via AS per fare in modo che il testo contenuto nel campo vada accapo (multiline) e venga spezzato negli spazi tra una parola e l'altra, mandando accapo la parola successiva

    ma in questo caso non ne abbiamo bisogno, quindi per il momento puoi non preoccupartene

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    intanto se ti va, per il momento puoi usare e studiare questo script che avevo scritto un po' di tempo fa e a cui ho aggiunto da poco il tempo

    ti basta piazzare sullo stage un campo di testo della dimensione che preferisci, poi lo rendi "Multiriga" dalle proprietà e lo chiami (nome di istanza) myTextField

    e attacchi il codice sul frame

    codice:
    var typing:Function = function (target:TextField, duration:Number, string:String):Void {
    	var __duration:Number = (duration*1000)/string.length;
    	var index:Number = 0;
    	target._parent["__intv"+target._name] = setInterval(function () {
    		target.text = string.substr(0, index);
    		index++;
    		if (index>string.length) {
    			clearInterval(target._parent["__intv"+target._name]);
    		}
    	}, __duration);
    }
    var nline = "\n";
    var prova:String = "Questo va accapo qui"+nline+"poi riprende a scrivere,"+nline+"e va accapo nuovamente"+nline+"e così via...";
    typing(myTextField, 10, prova);
    ps. il codice non fa fare il rumore del typewriter che hai postato, ma è facilmente implementabile

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    SEI UN GRANDE!

    Scusami se infrango la netiquette urlandolo! Studierò con molto piacere lo script che mi hai consigliato.

    P.S. complimenti per aver capito la logica dello script che ho postato senza che ti fornissi le dovute spiegazioni. Comunque sì, meglio pensarci domani...

    Ciao

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    beh lo script che hai postato è scritto piuttosto bene perciò non ho avuto difficoltà... l'ho applicato ma effettivamente se non si usa un carattere "monospaced" si rischia di ottenere un testo "sparpagliato", bruttino a vedersi, diciamo che è un po' fine a se stesso... ma glie esempi lo sono un po' tutti

    ora vado... 'notte

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    come promesso...

    codice:
    function typewriter(target:MovieClip, delay:Number):Void {
    	target.interval = function() {
    		target._visible = true;
    		keyHit.start(0, 1);
    		clearInterval(target.intervalID);
    	};
    	target.intervalID = setInterval(target, "interval", delay);
    	target._visible = false;
    }
    function placeText(target:MovieClip, x:Number, y:Number, banner:String):Void {
    	var initX:Number = x;
    	for (var i = 0; i<banner.length; i++) {
    		var char:MovieClip = target.attachMovie("letter", "char"+i, target.getNextHighestDepth());
    		var element:String = banner.substr(i, 1);
    		char.field.text = element;
    		var spacerX:Number = char.field.textWidth;
    		var spacerY:Number = char.field.textHeight;
    		char.field.autoSize = true;
    		char._x = x;
    		char._y = y;
    		//
    		// utilizzo la sintassi abbreviata dell'if, in questo modo 
    		// (condizione) ? azioni se soddisfatta : azioni se non soddisfatta;
    		// così gli dico che se trova il carattere \n deve tornare accapo incrementando y di "spacerY"
    		// altrimenti prosegue nella stessa riga, incrementando x di "spacerX"
    		x = (element != "\n") ? char._x+spacerX : initX;
    		y = (x == initX) ? y+spacerY : char._y;
    		//
    		var timer = i*200+Math.round(Math.random()*200);
    		typewriter(char, timer);
    	}
    }
    var keyHit = new Sound(this);
    keyHit.attachSound("typeClick");
    var nline = "\n";
    var prova:String = "Questo va accapo qui"+nline+"poi riprende a scrivere,"+nline+"e va accapo nuovamente"+nline+"e così via...";
    placeText(this, 100, 100, prova);
    come puoi leggere dalla parte commentata, non ho fatto altro che verificare, per ogni carattere, che non corrispondesse al "\n" (accapo) e se così era... doveva ripartire da zero in X e incrementare Y di una riga

    ps. ho eliminato il TextFormat, perchè in questo caso non era necessario, e ho aggiunto "autoSize" che ridimensiona il campo di testo il base al proprio contenuto (questo per evitare che lo spazio del campo contenuto nel clip in libreria non bastasse per le lettere più grosse, in particolare le maiuscole)

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    69
    Ciao!

    Ho provato il tuo script, e devo dire che è decisamente più agile di quello proposto dal libro.
    Sicuramente più appropriato per le mie esigenze specifiche.
    Aggiungo che il sonoro, non era una cosa che mi interessava, infatti,anche se le ho riportate qui, avevo eliminato le parti di codice che ne gestivano il comportamento.
    Forse questo aspetto potrebbe essere interessante per qualcun altro del forum....

    Sicuramente credo sia istruttivo per molti poter confrontare due codici differenti per ottenere lo stesso risultato. Molto bello.

    nel mio piccolo posso commentarne brevemente l'efficacia dell'applicazione.

    Il tuo sistema è più rapido e più leggero.E decisamente efficace.

    Il sistema del libro di contro produce un'animazione, forse più gradevole, forse leggermente più fluida e "customizzabile". Ma potrei sbagliarmi, e potrei ottenre con i tuo metodo lo stesso risultato.

    Riservandomi il piacere di verificare lo script modificato che hai proposto oggi,
    la mia scelta è: il metodo and80 !

    A tal proposito ti chiedo se, con il tuo metodo, sia necessario incorporare i font.

    Per rimanere in tema di confronti: prima di trovare questo script avevo riprodotto un effetto analogo costruendolo per intero sulla linea temporale.
    Per un'animazione scattante, come serve a me, il risultato era piuttosto piacevole.
    Però qulacosa mi dice che sia meglio utilizzare animazioni via script. E' così, oppure hai fini del risultato prodotto e della velocità di riproduzione "on-line" è indifferente?

    Ciao, e grazie ancora per la disponibilità.

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    >> A tal proposito ti chiedo se, con il tuo metodo, sia necessario incorporare i font.

    no, almeno non ai fini dello script, li incorpori solo se li devi incorporare, ad esempio se il campo di testo si trova sotto ad una maschera


    >> Però qulacosa mi dice che sia meglio utilizzare animazioni via script.
    >> E' così, oppure hai fini del risultato prodotto e della velocità di riproduzione "on-line" è indifferente?

    dopo varie prove ed esperienze con il primo e l'altro metodo, ti posso dire che secondo me le animazioni via script sono decisamente più leggere sia pèer la CPU che per il peso in bytes del filmato finale,
    considera solo una cosa fondamentale... per essere viste fluidamente, hanno bisogno di un framerate di almeno 30fps, io di solito tengo i miei swf a 60... a volte anche a 120, ma 60 va bene per sfruttare al meglio il setInterval

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.