Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    X CHI USA LINUX: swflib

    Ciao
    Visto che e' un risorsa di una certa entita', chiederei ai moderatori di tenere in rilievo per un po' il 3D, dato che sto cercando di facilitare la vita di parecchie persone.

    Poiche' ho linux e ci sono parekkie persone che come me hanno difficolta' ad usare un programma come me, apro questo 3D che discute del modo per fare filmati flash su linux:
    L'utilizzo delle librerie swflib per PHP.

    Con queste liberie e' possibile creare filmati swf tramite una pagina PHP.
    Link alla pagina del manuale:
    http://www.php.net/manual/it/ref.swf.php

    Prima di iniziare, premetto che voi sappiate usare PHP, non serviono database o roba complessa, solo usare cicli, dichiarare variabili e funzioni e chiamarle. Se poi nei vostri programmi metterete cose complesse, meglio per voi.

    E' facile intuire che essendo creato da uno script in PHP, il codice sara' estrememente lineare, quindi tutte le animazioni verranno fatte tramite cicli iterativi. Secondo me questo facilita la vita. Inoltre trovo semplice l'utilizzo di queste liberie perche' la modalita' di disegno mi ricorda le OpenGL, che utilizza le matrici (essendo grafica vettoriale).

    Dato che queste librerie non vengono mantenute (o cosi' sembra), sono nate le librerie ming, che pero' sono ancora in via di sviluppo. Per ora preferisco impegnarmi su cose affermate, inoltre il server PHP di tripod utilizza queste liberie.

    Io ho appena iniziato e ho intenzione di continuare a studiare queste librerie, se il post avra' successo, continuo a metterci su le varie scoperte che faccio. Mi spiace informarvi che non ho trovato tutorial sull'argomento, quindi per ora affidatevi solo a quello ke faccio io quello che fate voi.

    Prima di tutto:
    con queste liberie e' possibile fare disegni in grafica vettoriale e animarli. E' stata anche fatta una patch per aggiungere suoni alle applicazioni. E' possibile aggiungere bitmap e viene fornita anche una base per fare applicazioni 3D (almeno, per quanto ho visto sin ora, c'e' la possibilita' di creare un sistema cartesiano a 3 dimensioni, ma non l'ho ancora provato).

    Per quanto riguarda gli eventi, non so molto, ho visto che e' possibile creare dei pulsanti, e credo che sia il modo per gestire gli eventi. Non so assolutamente se e' possibile creare caselle di testo o simili.
    Comunque vengono dati gli elementi fondamentali per la costruzione di un filmato, quindi sta nelle mani del programmatore fare tutto.

    Il filmato, verra' creato aprendo un file, specificandone dimensioni e colore, poi si imposta la matrice delle trasformazioni dopodiche' si disegna e si mette tutto. Quando il filmato e' ultimato, si chiude il file.
    C'e' anche la possibilita' di non creare un file e di scrivere il filmato fhash direttamente sull'output, ma poiche' dipende dal server web la possibilita' di fare cio', lo menziono ma non lo usero' mai.

    Quindi, iniziamo il file PHP e impostamo il file. Facendo come faccio ora, quando il filmato php viene creato dallo script, verra' visualizzato sulla stessa pagina.
    codice:
    <?php
    	$fileName = "Filmato.swf";
    
    	// il filmato
    	
    	// in fondo allo script
    	echo "<EMBED src='$fileName' quality=high pluginspage=
    'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' 
    type='application/x-shockwave-flash' width='800' height='600'></EMBED>";
    ?>
    Se non volete visualizzare il filmato, togliete l'echo "<embed eccetera";
    cosi' facendo verra' creato il file swf ma non visualizzato.

    Premettendo che tutte le mie pagine inizeranno cosi', d'ora in poi scrivero' solo il codice per il filmato che andra' posto al posto di
    // il filmato

    Per prima cosa, in ogni filmato dobbiamo aprire il file, e al termine dobbiamo chiuderlo:
    (nota: tutte le funzioni di questa libreria iniziano con swf_)
    codice:
    swf_openfile($fileName, 400, 400, 30, 1, 1, 1);
    ....
    swf_fileclose();
    i parametri di openfile sono:
    il nome del file da creare, le dimensioni x e y, i frame al secondo, il colore dello sfondo in RGB.
    --------------------------
    [NOTA] Per chi non lo sapesse, nelle librerie grafiche complesse i colori sono espressi in RGB. Ora, se usate flash sapete cosa significa, ma forse non sapete che qui ogni componenete del colore ha un valore compreso tra 0 e 1.
    Il modo per ottenere questo valore e' VAL/255. Quindi per il rosso acceso faremo 255/255 = 1 R, 0/255 = 0 GB
    quindi il colore sara' 1, 0, 0
    lo stesso per il blu e verde
    0, 0, 1 blu e 0, 1, 0 verde
    Gli altri colori ricavateli per mezzo di una divisione. Il mio colore e'
    0, 102, 204 -> 0/255, 102/255, 204/255
    --------------------------

    Chiusa questa parentesi, notate che qui il frame al secondo sono la vostra velocita', ma non avrete funzioni per temporizzare, avrete solo questo riferimento alla velocita'.

    Ora, dopo aver aperto il file, inizializziamo la matrice delle trasformazioni con:
    codice:
    	swf_ortho2(minx, maxx, miny, maxy);
    Attenzione, con questa funzione, il filmato sara' come un vero piano catresiano, quindi in basso a sin avremo minx e miny, in alto a destra maxx e maxy

    A questo punto possiamo iniziare a disegnare.
    per questa prima lezione non faccio animazioni, ma un "disegno" statico.
    Per disegnare utilizzeremo le funzioni
    codice:
    	swf_defineline();
    	swf_definerect();
    questi sono solo 2 esempi, esistono anche altre funzioni per il disegno (definepoly, define bitmap e forse altre), ma poiche' tutte si basano sullo stesso principio, allora ne prendo in esempio 2.

    Notare che il primo parametro di tutte queste funzioni e' sempre l'ID dell'oggetto, che e' un intero.

    Per disegnare una linea, facciamo:
    codice:
    	swf_defineline(ID, x1, y1, x2, y2, W);
    dove:
    ID e' il numero che identifica l'oggetto.
    Se volete associarvi delle parole, potete fare cose come:
    $linea = 1;
    swf:defineline($linea, ...);
    o mettere l'ID dentro degli array. A vostra scelta.
    x1, y1, x2, y2 sono le coordinate del primo punto e del secondo che definiscono la linea. W e' lo spessore della linea. E' un float, quindi potete mettere 0.1, 0.123, 1.0, 4.0, quello che vi pare.

    Per diegnare il rettangolo facciamo
    codice:
    	swf_definerect(ID, x1, y1, x2, y2, W);
    come vedete i parametri sono gli stessi:
    ID e' l'identificatore,
    x1, y1, x2, y2 indicano 2 vertici del rettangolo
    W e' lo spessore dei bordi. Se e' 0.0, il rettangolo sara' pieno, altrimenti vuoto con i bordi della dimensione da voi specificata.

    Con queste 2 funzioni potete gia fare qualke disegno spastico. Pero', fino ad ora, uscirebbe tutto a 2 colori:
    quello dello sfondo e il nero per gli oggetti
    Quindi, per cambiare colore usate la funzione
    codice:
    	swf_addcolor(R, G, B, A);
    Questa utilizza anche la trasparenza (Alpha), che puo' essere sempre tra 0 e 1.
    0 e' opaco, 1 e' trasparente.

    La cosa interessante dell'alpha e' che ho provato ad usarlo ma nn esce nulla...
    mi documentero'.

    Se scrivete ste cose sul vostro file PHP, pero', non comparira' un belnulla.
    Questo perche' quando avete definito gli oggetti, non li avete creati, ma solo definiti.
    Quindi usate le funzioni
    codice:
    	swf_placeobject(ID, DEPTH);
    	swf_removeobject(DEPTH);
    per mettere e togliere un oggetto
    ID e' l'ID dell'oggetto da mettere
    DAPTH e' la profondita'. Potete mettere da 1 fino a oltre 65000 piani (65535 per la precisione

    bene. Provate, ma non otterrete nulla (di visibile).
    Un'ultima cosa, necessaria:
    codice:
    	swf_showframe();
    permette di visualizzare il frame corrente, senza di questo non vedrete nulla.

    Ecco un esempio molto cretino che disegna un rettangolo e una linea sullo sfondo nero:
    codice:
    <?php
    	$fileName = "akiProva1.swf";
    	swf_openfile($fileName, 400, 400, 30, 0, 0, 0);
    	echo 'File creato
    ';
    	swf_ortho2(-200, 200, -200, 200);
    	echo 'Inizializzata matrice
    ';
    	swf_addcolor(1, 1, 1, 0);
    
    	swf_defineline(1, -10, -10, 10, 10, 3);
    	swf_definerect(2, -20, -20, -10, -10, 3);
    	swf_definerect(3, 20, 20, 10, 10, 0); 
    
    	swf_placeobject(1, 1); // linea piano 1
    	swf_placeobject(2, 2); // rett vuoto piano 2
    	swf_placeobject(3, 3);// rett pieno depth 3
    	swf_showframe(); // visualizza
    
    	swf_closefile(); // chiude 
    	echo "<EMBED src='$fileName' quality=high pluginspage=
    'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' 
    type='application/x-shockwave-flash' width='800' height='600'></EMBED>"; // mettiamo il file sulla pagina
    ?>
    Spero vi possiate divertire un po.

    Ripeto che se ha successo, nella prossima lezione vi spiego come traslare le cose per creare animazioni (e la cosa si fa ineteressante :gren: )

    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    grande !!
    Continua così perchè il lavoro che stai facendo è davvero interessantissimo!
    Penso che siamo ancora agli inizi e presto spero avremo un bell'ambiente di sviluppo con cui lavorare nella maniera più produttiva possibile senza queste "scriptate"..

    Cmq è davvero un bel lavoro!
    Appena mi libero da questi esami (domani:sgrat: ) ci dedico un bel po' di tempo!


    Ciao!
    Alex

  3. #3

    Seconda parte

    Bhe, direi che fino ad ora si puo' fare ben poco con queste librerie.

    Adesso vi spiego come fare animazioni.

    Incomincio a dire che, poiche' si usa una matrice per le trasformazioni, prima di fare una trasformazione (traslazione, rotazione o scala) e' necessario salvare la matrice corrente. Finite le operazioni di trasformazione ripristiniamo la matrice originale.
    per fare cio', usiamo
    codice:
    	swf_pushmatrix(); // salva matrice
    	swf_popmatrix(); // ricarica matrice
    Ora cerco di spiegarvi meglio il concetto:
    per il disegnso, si utilizza un a matrice (per come la sapevo io e' di 4*4, ma su queste librerie non so se e' uguale) che indica le trasformazioni, cioe' la traslazione, la rotazione e la scala. In questa matrice abbiamo delle posizioni ben precise che indicano le trasformazioni applicate (ad esempio, l'elemento 2, 2 puo' indicare la scala). Quando noi eseguiamo una trasformazione, non facciamo altro che moltiplicare la matrice corrente della trasformazione per un'altra matrice 4*4 che rapparesenta la trasformazione.
    Questo implica che se eseguiamo una traslazione, lo facciamo su tutti gli elementi. Per questo motivo, e' necessario salvare la matrice e poi ripristinarla quando eseguiamo qualche operazione di questo tipo.
    Questo sistema di coordinate pero' ha una particolarita' che a volte la rende difficile da usare, ma una volta che si prende familiarita' con il sistema, non vi accorgerete nemmeno di applicare questa tecnica:
    Prendiamo come esempio un quadrato disegnato al centro dello schermo, alle corrdinate 0, 0.
    Se noi trasliamo questo quadrato di 5 sull'asse X, spostiamo il quadrato a destra di 5. A questo punto, il centro dell'immagine sara' stato spostato sul centro del quadrato, perche' prima era ner centro del quadrato. Quindi, avete notato come il centro dell'immagine si sposti con le traslazioni. Se creiamo un punto alla coordinata 0, 0, notiamo che si crea al centro del quadrato.
    Ma se volessimo crarlo nel VERO centro dell'immagine? A questo punto, usiamo pushmatrix e popmatrix.
    Facendo la push, salviamo la matrice corrente, e lavoreremo su una copia. Quindi, dopo aver traslato la copia, facciamo popmatrix e otteniamo la figura traslata, ma con il centro dell'immagine dov'era prima.
    Quindi, prima di fare traslazioni assicuriamoci di fare push e finite le traslazioni, la pop.
    Per traslare, esistono le funzioni
    codice:
    	swf_translate(x, y, z);
    	swf_rotate(gradi, asse);
    	swf_scale(x, y, z);
    per spostare la matrice corrente usiamo translate, che riceve 3 parametri, che indicano di quanto dobbiamo spostare per ogni asse. Se lavorate in 2D (come facciamo finora) mettete l'asse z a 0.

    per ruotare, usiamo rotate, che riceve 2 parametri: i gradi di cui ruotare la matrice e l'asse su cui ruotare. L'asse va indicato con una stringa come 'x', 'y', 'z'. Non vorrei dire una cavolta 8non ho ancora provato) ma forse avete la possibilita' di ruotare contemporanemanete su 2 assi facendo ad esempio 'xy'. Se funziona con 2, molto probabilmente va anche con 3 assi.

    Per scalare un'immagine, usate scale, che riceve 3 parametri, che indicano di quando deve essere scalata l'immagine. Se fate
    swf_scale(1.0, 1.0, 1.0);
    l'immagine resta delle stesse dimensioni attuali, quindi se mettete 0.5 dimezzate, 2.0 raddoppiate.
    Non ho ancora provato, ma credo che se mettete valori negativi avete una specularita', quindi se fate
    swf_scale(-1.0, 1.0, 1.0);
    avrete un'oggetto perfettamente uguale ma speculare sull'asse x.
    Mi baso sulle mie nozioni di OpenGL, ma non ho ancora provato su queste librerie.

    Ritorno un secondo sulla tecnica di tralsazione di cui vi parlavo prima... ricordate? push e pop...
    bene, tenete in considerazione anche l'ordine in cui fate le traslazioni! E' importante! Ruotare e poi spostare, non e' come postate e poi ruotare, ora capite il perche.
    Torniamo al quadrato: se lo spostiamo a destra di 5, il centro dell'immagine si sposta con esso di 5. Quindi se adesso ruotiamo l'immagine di 90 gradi ruotera' in base al centro del quadrato.
    E se volessimo fare ruotare il quadrato rispetto al centro dell'immagine?
    i modi sono 2:
    fare una push
    fare un'altra push
    traslare di 5
    fare una pop
    ruotare di 90
    fare una pop

    che e' il metodo + lungo e lento
    l'altro consente una sola push:
    fare una push
    ruotare di 90
    traslare di 5
    fare una pop

    il risultato e' lo stesso.
    C'e' da notare pero', che l'ordine delle operazioni nella seconda sono invertite rispetto alla prima: prima ruotiamo e poi trasliamo.
    Questo perche' non usiamo le varie push per ogni trasformazione.
    Per questo che la tecnica consiste nell'eseguire le operazioni al contrario.

    Il primo metodo (cioe' fare push e pop per ogni operazione) escludetelo, non solo perche' e' lento (e quandi si parla di grafica si deve parlare anche di velocita'), ma anche perche' vi e' un limite al numero di push e pop che si possono fare. Non credo che sia molto basso questo numero, ma per sicurezza e' meglio farne pochi.

    BENE!
    Ora che si sa come traslare, non ci resta che animare qualcosa. Per animare dobbiamo fare un ciclo che faccia tutto. Ricordate che il ciclo non viene eseguito run-time (come potrebbe essere per un gioco in C++) quindi non dovete temporizzare nulla. I tempi verranno stabiliti dai frame per sec.

    Bhe, non credo ci sia molto da dire, piu' che altro c'e' da fare un esempio, in quanto avete gia i concetti base per fare un'animazione, solo che non ne avete mai vista una (o almeno credo).
    Vi faccio notare anche, che -sempre perche' non viene eseguito sun-time- non serve che il ciclo sia ottimizzato per essere eseguito velocemente, ma serve che faccia cio' che deve.
    Se avessi fatto un ciclo in C per animare qualcosa, avrei cercato di chiamare il meno possibile delle funzioni poiche' la chiamata fa perdere tempo. Qui, invece, possiamo permetterci di mettere il codice che disegna dentro una funzione, e dentro al ciclo gestiamo tutto per bene. Non so se me sono spiegato bene, ma un esempio fara' capire bene.

    ANIMAZIONE della lineetta che avevo disegnato prima:
    codice:
    <?php
    /*
    funzione disegno:
    disegna l'oggetto spastico
    notatre che disegna un oggetto su 4 piani partendo da quello passato come parametro (ho problemi con la cencellazione, ma vedo se posso rimuoverli)
    */
    function drawForm($plane)
    {
    	swf_pushmatrix();
    	swf_placeobject(1, $plane);
    	swf_placeobject(2, $plane+1);
    
    	swf_pushmatrix();
    	swf_addcolor(0, 102/255, 204/255, 0);
    	swf_placeobject(3, $plane+2);
    	swf_translate(30, 30, 0);
    	swf_addcolor(1, 1, 1, 0);
    	swf_placeobject(2, $plane+3);
    	swf_popmatrix();
    
    	swf_showframe(); // disegnamo sullo skermo
    	swf_popmatrix();
    }
    /*
    cancellazione del disegno
    partendo da un piano cancella gli oggetti nei 4 piani
    */
    function removeForm($plane)
    {
    	swf_removeobject($plane);
    	swf_removeobject($plane+1);
    	swf_removeobject($plane+2);
    	swf_removeobject($plane+3);
    }
    /* 
     non si perde tempo nellachiamata 
     di funzioni, il risultato va nel file
    */
    	$fileName = "akiProva2.swf";
    	swf_openfile($fileName, 400, 400, 30, 0, 0, 0);
    	echo 'File creato
    ';
    	swf_ortho2(-200, 200, -200, 200);
    	echo 'Inizializzata matrice
    ';
    	swf_addcolor(1, 1, 1, 0);
    
    // gli oggetti che verranno usati dalle funzioni per il disegno
    	swf_defineline(1, -10, -10, 10, 10, 3);
    	swf_definerect(2, -20, -20, -10, -10, 3); // larghezza 3
    	swf_definerect(3, 20, 20, 10, 10, 0); // pieno
    
    // 360 gradi, un giro completo
    	for ($i = 0, $count = 0; $i < 360; $i+=8, $count += 4)
    	{
    		swf_pushmatrix(); // salviamo la matrice prima di trasformare qualcosa
    		swf_rotate($i, 'z'); // ruotiamo sull'asse z
    		swf_scale($i/90, $i/90, 1); // ingrandiamo
    		drawForm($count); // disegnamo e visualizziamo sullo skermo
    		removeForm($count); // eliminiamo il frame
    /*
    notare che non facciamo un refresh dell'immagine oram altrimenti avremmo i frame pieni e vuoti ad intermittenza
    */
    		swf_popmatrix(); // ripristiniamo
    	}
    	
    /*
    questo fa lo stesso che il precendente ma rimpicciolisce l'immagine
    */
    	for ($i = 360, $count = 360; $i > -1; $i-=8, $count -= 4)
    	{
    		swf_pushmatrix();
    		swf_rotate($i, 'z');
    		swf_scale($i/90, $i/90, 1);
    		drawForm($count);
    		removeForm($count);
    		swf_popmatrix();
    	}
    
    	swf_closefile();
    	echo "<EMBED src='$fileName' quality=high pluginspage=
    'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' 
    type='application/x-shockwave-flash' width='800' height='600'></EMBED>";
    ?>
    Questo filmato va all'infinito... bhe, dovrebbe andare all'infinito, ma in effetti non va ^_^
    non so perche', ma sul mio pc deve esserci qualche uso spropositato di memoria, infatti + va avanti, + rallenta, finche' esce con un errore che non so ca cosa sia originato.
    provatelo se avete voglia e poi mi dite

    Comunque credo possa andare bene come esempio, l'importate e' capire alle menopeggio cosa si deve fare.

    Su un esempio ho visto altre funzioni da applicare all'animazione, ma non le capisco per ora, appena mi sono documentato spiego

    Intanto potete smanettare un po con queste

    Ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  4. #4
    Grazie per il supporto ^_^
    spero di arrivare almeno alla creazione di filmati con suoni ed eventi
    adesso magari faro' passi da gigante durante le vacanse di pasqua, che iniziano giovedi' 17 fino al 27. Fino a quel giorno non so quanto riusciro' a fare

    Ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  5. #5
    ummm adesso va bene, tutto liscio il mio filmato.... mah
    l
    comunque le funzioni di cui parlavo (non mi ero documentato) servono per fermare il filmato, non sono altro che gli actionscript:
    codice:
    	swf_startdoaction(); // inizio action script
    	swf_actionstop(); // ferma il frame
    	swf_enddoaction(); // fine as
    
    	swf_showframe(); // applica
    notare che e' necessario lo showframe, altrimenti non fermerebbe il filmato. Provare per credere. (aggiungetelo alla fine del mio script, tra il 2o ciclo for e il closefile)

    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  6. #6
    complimenti, davvero notevole.
    magari in futuro sarà possibile creare un interfaccia grafica invece di dover scrivere tutto a mano, così no nsaremo limitati alle piattaforme mac o pc per sviluppare in flash.

    ancora complimenti

    (qualcuno ha piuttosto notizia di un flash player un po' aggiornato per BeOS?)

  7. #7
    si, in effetti ci pesnavo ad un'interfaccia di questo tipo... bhe, dato che non so se saro' io a farla, incomincio a spiegare un po come usare le librerie, non si sa mai se c'e' qualcuno che mi precede nello sviluppo dell'interfaccia grafica...
    e comunque sarebbe un bel problema farne una, in quanto la gestione dei cicli e tutto il resto puo' essere problematica...
    bisognerebbe provare almeno a fare una interfaccia (magari scritta) ma di latro livello... tipo una pagina HTML con campi e funzioni a disposizione dell'utente, che, un po alla volta, fara' il filmato ma senza passare a PHP
    bho, devo pensarci

    grazie

    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  8. #8

    Continuo!

    Si si, continuo...
    allora, inizio col dirvi che questa libreria si puo' usare anche in C. Quindi, potete fare questi filmati anche da questo linguaggio, o C++, se non avete PHP, poi potete mettere il file sul vostro sito (ma non e' strano che uno che fa un sito abbia C e non PHP ?? ^_^)
    Vi basta includere la libreria swf.h
    La sintassi e' identica a quella che sto descrivendo in questo tutorial

    Ma ritornando all'argomento principale, vi spiego ora come fare i Simboli, cioe' mini filmati flash che vengono trattati come oggetti normali.
    Premetto che ci ho passato su un po di tempo per capire come funzionano, facendo prove dato che non trovo un cavolo di esempio in giro...
    Sta di fatto che adesso ho le idee piu' chiare di irei e sono riuscito proprio mezz'ora fa a creare il mio primo simbolo.
    Nel simbolo, quindi, possiamo mettere una serie di poligoni per fare un'immagine complessa (ma per questo e' meglio lo shape di cui vi parlo dopo) o anche un'animazione.

    Per fare un simbolo usiamo
    codice:
    	swf_startsymbol(ID);
    	swf_endsymbol();
    	swf_paceobject();
    	swf_removeobject();
    startsymbol richiede il solito ID che mettiamo sempre quando si definisce un oggetto.
    endsymbol serve per indicare il termine della definizione del simbolo.
    per richiamare un simbolo usiamo placeobject e per eliminarlo removeobject

    Per metterci dentro qualcosa, dobbiamo fare le stesse cose che facciamo per disegnare normalmente, solo che racchiuderemo questo codice dentro startsymbol e endsymbol. Si DEVE pero', mettere prima di endsymbol un showframe. Effettivamente il contenuto del simbolo non viene visualizzato sullo schermo. Per visualizzarlo dovremo richiamare placeobject e farlo seguire da unaltro showframe. Suppongo che il primo showframe serva solo a salvare i dati nel file (e adesso che ci penso, showframe potrebbe servire proprio per salvare i cambiamenti fatti sul file... questo chiarirebbe diverse cose che ho notato nelle prove e che magari noterete anche voi). Quindi la creazione di un simbolo non presenta particolari difficilta', tranne UN PIIIICCCOLO particolare: per quello che ho potuto vedere fin'ora, non e' possibile mettere i colori dentro un simbolo. Io ho provato con la stessa figura di prima, meta' bianca e meta' azzurra, e ho notato che verra' disegnata TUTTA del colore attuale, quindi la libreria se ne infischia altamente dei colori che ci sono nel simbolo e disegna tutto del colore attuale specificato con addcolor. Fino a domostrazione contraria, cioe' finche' non salta fuori come mantenere i colori definiti dentro il simbolo (sempre se si puo' fare) conviene usare delle funzioni, che fanno la stessa cosa. Inoltre nelle funzioni possiamo metterci di tutto. Magari avremo difficolta' con la rimozione degli elementi, pero' se bisogna subire le limitazioni che abbiamo fino ora usando i simboli, non saprei consigliare.

    Ora vi spiego brevemente cos'e' un shape. Non le ho ancora usare effettivamente, ma ho fatto giuto una prova per capire come usarle.
    Si inzia con (indovinate un po')
    codice:
    	swf_startshape(ID);
    e si termina con
    codice:
    	swf_endshape();
    (MADAI? )
    Il processo per disegnarci dentro, pero' e' diverso, non si usano le funzioni che conosciamo di solito, ma se ne usano alcune speciali per disegni piu' complessi di semplici linee e rettangoli. Abbiamo a disposizione archi e roba varia, oltre che alle solite cose (bitmap, linee...)
    le funzioni iniziano con
    swf_shape
    dato che sono un po (e io sono molto pigro ) andate sul link ch vi ho messo nella prima lezione e guardatele tutte.

    termino qui questa introduzione agli argomenti, e spero di poterli approfondire.

    Sappiate comunque che nei symbol, potete anche mettere gli action (che descrivero' POI)



    AGGIUNTA:
    Facendo delle prove ho scoperto come mantenere i colori del simbolo, ma la cosa e' uscita per caso e non ho ancora capito bene qual'e' il metodo... se capisco le regole che ci stanno dietro poi faro' una lezione sull'argomento.
    Comunque, sembra che si debba impostare il colore attuale cosi':
    codice:
    	swf_addcolor(0, 0, 0, 0);
    	oppure 
    	swf_addcolor(0, 0, 0, 1);
    Ripeto che il meccanismo non mi e' chiaro, perche' il primo sarebbe trasparente, il secondo nero. Non riesco bene ad afferrare la logica dell'alpha, e cerchero' di capire perche' e' una capacita' dei colori di flash molto usata.
    Se riesco a trovare i sorgenti della libreria guardero' che logica ci sta dietro, sempre che non trovo qualcosa di piu' immediato prima.

    Ri-
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  9. #9
    ah raga, dato che cercando in giro ho notato che queste librerie sono piu' in disuso di quanto pensassi, pero' essendo le uniche librerie "complete" e non sperimentali per gli swf, appena finisco questo tutorial mi metto ad imparare ming, che non solo sono mantenute, ma adottano un'interfaccia che utilizza gli oggetti. Inoltre sembrano essere opensource, quindi probabilmente il progetto andra' continuamente avanti.
    purtroppo pero' dato che queste librerie sono stabili e utilizzate da diversi server (tra cui quello di tripod-lycos che uso anche io) e' necessario documentare un po la gente anche su queste, ma mi auguro che si passi il prima possibile a ming, che promettono meglio (e sono documentate )

    Prossime lezioni:
    pulsanti e alpha sono argomenti che non posso non trattare.
    Poi magari vedo se aggiungere qualcosa sui suoni e sulle matrici 3D (che pero' sembrano presentare problemi con alcuni lettori flash, poiche' questi supportano matrici bidimensionali)

    Ciauz
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  10. #10

    THO

    Divertitevi un po con questo esempio :P
    Se volete smanettarci un po potete, ovviamente resta mio...
    codice:
    <?php
    
    	function drawForm($plane)
    	{
    		swf_pushmatrix();
    			swf_placeobject(1, $plane);
    			swf_placeobject(2, $plane+1);
    
    			swf_pushmatrix();
    				swf_addcolor(0, 102/255, 204/255, 0);
    				swf_placeobject(3, $plane+2);
    				swf_translate(30, 30, 0);
    				swf_addcolor(1, 1, 1, 0);
    				swf_placeobject(2, $plane+3);
    			swf_popmatrix();
    
    			swf_showframe();
    		swf_popmatrix();
    		return 4;
    	}
    
    	function removeForm($plane)
    	{
    		swf_removeobject($plane);
    		swf_removeobject($plane+1);
    		swf_removeobject($plane+2);
    		swf_removeobject($plane+3);
    	}
    
    	$fileName = "swf_symbol.swf";
    
    	$shape = 100;
    	$symbol = 200;
    	$line = 10;
    	$rect1 = 20;
    	$rect2 = 30;
    
    	swf_openfile($fileName, 400, 400, 30, 0, 0, 0);
    	swf_ortho2(-200, 200, -200, 200);
    
    
    	swf_defineline($line, -10, -10, 10, 10, 3);
    	swf_definerect($rect1, -20, -20, -10, -10, 3); // larghezza 3
    	swf_definerect($rect2, 20, 20, 10, 10, 0); // pieno
    
    	swf_startsymbol($shape);
    		swf_pushmatrix();
    			swf_addcolor(1, 1, 1, 0);
    			swf_placeobject($line, $symbol);
    			swf_placeobject($rect1, $symbol);
    			swf_pushmatrix();
    				swf_addcolor(0, 102/255, 204/255, 0);
    				swf_placeobject($rect2, $symbol+1);
    				swf_translate(30, 30, 0);
    				swf_addcolor(1, 1, 1, 0);
    				swf_placeobject($rect1, $symbol+2);
    			swf_popmatrix();
    		swf_popmatrix();
    		swf_showframe();
    	swf_endsymbol();
    
    	swf_startsymbol($symbol);
    		for ($i = 0; $i < 360; $i+=360/36)
    		{
    			swf_pushmatrix();
    				swf_mulcolor(1.0, 1.0, 1.0, 0.0);
    				swf_addcolor(0.0, 0.0, 0.0, 1.0);
    				swf_rotate($i, 'z');
    				swf_scale($i/90, $i/90, 1);
    				swf_placeobject($shape, $i+1000);
    				swf_showframe();
    				swf_removeobject($i+1000);
    			swf_popmatrix();
    		}
    	swf_endsymbol();
    
    	$n = 36;
    	for ($i = 1; $i <= $n; $i++)
    	{
    		swf_pushmatrix();
    			swf_translate(cos((2*pi()/$n)*$i)*100, sin((2*pi()/$n)*$i)*100, 0);
    			swf_placeobject($symbol, 1000);
    			swf_showframe();
    		swf_popmatrix();
    	}
    
    	swf_startdoaction();
    	swf_actionstop();
    	swf_enddoaction();
    	swf_showframe();
    
    	swf_closefile();
    	echo "<EMBED src='$fileName' quality=high
    pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' 
    type='application/x-shockwave-flash' 
    width='800' height='600'></EMBED>";
    ?>
    vedete di capire come funge.
    La prossima volta cerchero' di combinare questo esempio con gli alpha, per fare che i vari disegni siano sfumati... o qualcosa del genere, ma che comunque impieghi l'alpha.
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.