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.
Se non volete visualizzare il filmato, togliete l'echo "<embed eccetera";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>"; ?>
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_)
i parametri di openfile sono:codice:swf_openfile($fileName, 400, 400, 30, 1, 1, 1); .... swf_fileclose();
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:
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 maxycodice:swf_ortho2(minx, maxx, miny, maxy);
A questo punto possiamo iniziare a disegnare.
per questa prima lezione non faccio animazioni, ma un "disegno" statico.
Per disegnare utilizzeremo le funzioni
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.codice:swf_defineline(); swf_definerect();
Notare che il primo parametro di tutte queste funzioni e' sempre l'ID dell'oggetto, che e' un intero.
Per disegnare una linea, facciamo:
dove:codice:swf_defineline(ID, x1, y1, x2, y2, W);
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
come vedete i parametri sono gli stessi:codice:swf_definerect(ID, x1, y1, x2, y2, W);
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
Questa utilizza anche la trasparenza (Alpha), che puo' essere sempre tra 0 e 1.codice:swf_addcolor(R, G, B, A);
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
per mettere e togliere un oggettocodice:swf_placeobject(ID, DEPTH); swf_removeobject(DEPTH);
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:
permette di visualizzare il frame corrente, senza di questo non vedrete nulla.codice:swf_showframe();
Ecco un esempio molto cretino che disegna un rettangolo e una linea sullo sfondo nero:
Spero vi possiate divertire un po.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 ?>
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![]()