Posted by: riser on: marzec 21, 2009
Czyli galeria flash + XML. Zadaniem tego małego tutoriala jest utworzenie prostej galerii zdjęć, bazującej na danych zawartych w dokumencie XML.
<galeria>
<obraz lokalizacja="photo/photo_1.jpg" opis="obrazek 1"/>
<obraz lokalizacja="photo/photo_2.jpg" opis="obrazek 2"/>
<obraz lokalizacja="photo/photo_3.jpg" opis="obrazek 3"/>
<obraz lokalizacja="photo/photo_4.jpg" opis="obrazek 4"/>
<obraz lokalizacja="photo/photo_5.jpg" opis="obrazek 5"/>
<obraz lokalizacja="photo/photo_6.jpg" opis="obrazek 6"/>
</galeria>
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;
}
public class MojaGaleria extends Sprite {
public function MojaGaleria() {
trace("Hallo!");
}
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;public class MojaGaleria extends Sprite {
public function MojaGaleria() {
trace("Hallo!");
}
}Deklaracja zmienny globalnych w AS. Zmienne globalne deklarujemy przed funkcjami.
public var nazwa:typ;Deklarując zmienne lokalne w AS MUSIMY od razu przypisać do niej wartość
var nazwa:typ = wartosc;Tworzenie nowych obiektów
new NazwaObiektu(parametry_konstruktora);
Musimy zadeklarować zmienną globalną typu URLLoader. U mnie nazywa się ona loader. Globalną ponieważ będziemy się do niej odnosić z funkcji loading().
public var loader:URLLoader;
Następnie tworzymy zmienną typu URLRequest. U mnie nazywa się ona link. Jako parametr konstruktora podajemy w cudzysłowie lokalizację pliku XML.
var link:URLRequest = new URLRequest("baza.xml");
Do wcześniej utworzonej zmiennej globalnej przypisujemy nowy obiekt typu URLLoader.
loader = new URLLoader();
Do zmiennej loader dodajemy ‘punkt nasłuchiwania’. addEventListener(zdarzenie, funkcja) Spowoduje to wykonanie się funkcji funkcja po wykonaniu się zdarzenia zdarzenie. W naszym przykładzie spowoduje to uruchomienie funkcji loading po załadowaniu pliku wskazywanego przez zmienna loader.
loader.addEventListener(Event.COMPLETE, loading);
Pozostało nam wskazać co ma załadować nasz loader. W tym celu posłużymy się funkcją load, której argumentem jest zmienna typu URLRequest. Tak więc aby załadować plik XML wpiszemy
loader.load(link)
Pozostało nam więc tylko napisanie funkcji laoding, której zadaniem będzie parsowanie pliku XML. Tworzymy więc zmienną typu XML
var XMLgaleria:XML = new XML();
i przypisujemy tej zmiennej zawartość pliku XML po przeprowadzeniu parsowania.
XMLgaleria = XML(loader.data);
Następnie wyświetlamy treść pliku
trace(XMLgaleria);
Jeśli wszystko poszło poprawnie to podczas testowania filmu (ctrl+enter) w Panelu wyjście powinna wyświetlić się zawartość naszego pliku XML.
A tak powinien wyglądać nasz kod na stan obecny.
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;
public class MojaGaleria extends Sprite {
public var loader:URLLoader;
public function MojaGaleria() {
trace("Hallo!");
var link:URLRequest = new URLRequest("baza.xml");
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loading);
loader.load(link);
}
function loading(evt:Event):void {
var XMLgaleria:XML = new XML();
XMLgaleria = XML(loader.data);
trace(XMLgaleria);
}
}
}
Składnia pętli for each
for each (var nazwa_zmiennej in nazwa_tablice) { }
Dostęp do zawartości pól tablicy uzyskujemy przez zmienną.
Dla składni XML, którą posługuje się w tym przykładzie dostęp do zmiennych jest bardzo prosty. Obdywa się poprzez napisanie nazwa_zmiennej.@lokalizacja
Posłużymy się pętlą for each, która wykonuje się dla wszystkich elementów tablicy
for each (var obraz in XMLgaleria.children()) {}
Teraz zajmiemy się wnętrzem pętli. Musimy stworzyć załadować obrazki. Tworzymy więc zmienną typu URLRequest w której podamy lokalizacje obrazka oraz Loader
var req:URLRequest = new URLRequest(obraz.@lokalizacja);
var img:Loader = new Loader();
Ładujemy obrazek do zmiennej
img.load(req);
Aby wyświetlić obiekt na scenie posługujemy się funkcją addChild
addChild(img);
Jeśli wszystko poszło dobrze i nie mamy żadnych błędów, powinniśmy zobaczyć ostatni obrazek. To dobrze, oznacza to, że załadowaliśmy wszystkie obrazki, jednak nakładają one się na siebie dlatego widzimy tylko ostatni. Nasz plik powinien wyglądać tak
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;
public class MojaGaleria extends Sprite {
public var loader:URLLoader;
public function MojaGaleria() {
trace("Hallo!");
var link:URLRequest = new URLRequest("baza.xml");
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loading);
loader.load(link);
}
function loading(evt:Event):void {
var XMLgaleria:XML = new XML();
XMLgaleria = XML(loader.data);
trace(XMLgaleria);
for each (var obraz in XMLgaleria.children()) {
var req:URLRequest = new URLRequest(obraz.@lokalizacja);
var img:Loader = new Loader();
img.load(req);
addChild(img);
}
}
}
}
var tablica:Array = [[0,0],[0,200],[200,400],[200,200],[0,400],[200,0]];
var i:int = 0;img.x = tablica[i][1];
img.y = tablica[i][0];
i+=1;
Jeśli wszystko się udało powinniśmy zobaczyć obrazki w następującej kolejności: 1,2,5,6,4,3. A nasz powinien wyglądać tak
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;public class MojaGaleria extends Sprite {public var loader:URLLoader;public function MojaGaleria() {
trace("Hallo!");
var link:URLRequest = new URLRequest("baza.xml");
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loading);
loader.load(link);
}function loading(evt:Event):void {
var XMLgaleria:XML = new XML();
XMLgaleria = XML(loader.data);
trace(XMLgaleria);var tablica:Array = [[0,0],[0,200],[200,400],[200,200],[0,400],[200,0]];
var i:int = 0;
for each (var obraz in XMLgaleria.children()) {
var req:URLRequest = new URLRequest(obraz.@lokalizacja);
var img:Loader = new Loader();
img.load(req);
img.x = tablica[i][1];
img.y = tablica[i][0];
addChild(img);
i+=1;
}
}
}
}import flash.text.TextField;var txt:TextField = new TextField();txt.text = obraz.@opis;
addChild(txt);
txt.x = tablica[i][1]+75;
txt.y = tablica[i][0]+150;
Tak wygląda gotowy plik
package {
import flash.net.*;
import flash.display.*;
import flash.events.*;
import flash.text.TextField;public class MojaGaleria extends Sprite {public var loader:URLLoader;
public function MojaGaleria() {
trace("Hallo!");
var link:URLRequest = new URLRequest("baza.xml");
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loading);
loader.load(link);
}function loading(evt:Event):void {
var XMLgaleria:XML = new XML();
XMLgaleria = XML(loader.data);
trace(XMLgaleria);
var tablica:Array = [[0,0],[0,200],[200,400],[200,200],[0,400],[200,0]];
var i:int = 0;
for each (var obraz in XMLgaleria.children()) {
var req:URLRequest = new URLRequest(obraz.@lokalizacja);
var img:Loader = new Loader();
img.load(req);
img.x = tablica[i][1];
img.y = tablica[i][0];
addChild(img);
var txt:TextField = new TextField();
txt.text = obraz.@opis;
addChild(txt);
txt.x = tablica[i][1]+75;
txt.y = tablica[i][0]+150;
i+=1;
}
}
}
}A tu można pobrać plik z gotową galerią (Uwaga tylko pliki *.swf,*.xml oraz zdjęcia !)
Posted by: riser on: luty 16, 2009
Termin poprawki zaliczenia wyskoczył z dupy i to w ten sam dzień co poprawka egzaminu. Na forum kłótnia boruta i apokalipsa. Jednak za dużo tam szczekaczy, a za mało osób coś faktycznie robiących. No nic pozostawiłem tą anarchię samą sobie, może w ten sposób zrozumieją, że potrzebne nam zgranie. A co ja w tym wszystkim robię ? Próbuję to jakoś ogarnąć ale marnie to widzę. Materiał jest bardzo opornie opracowany i ciężko coś z niego zrozumieć. No ale dzięki zabawce jaką jest compiz bynajmniej nie gubię się w szeregu na otwieranych okien, a kiedy mam dość zmieniam pulpit na czysty :p
Posted by: riser on: luty 15, 2009
Intrygująca iranka, bo tak właśnie nazywa się najnowsza wersja Ubuntu 8.10 jest moim nowym miejscem pracy. Korzystając z chwili wolnogo czasu postanowiłem zrobić porządki. Słysząc opinie o nowym wine oraz możliwościach Virtualboxa postanowiłem, że nie mam zamiaru wracać na windowsa. (no chyba że programy do uczelni mnie do tego zmusza ;/). O instalacji samego systemu nie będę pisał, ponieważ jest szybka, banalna i bezproblemowa. Opisze natomiast co zmieniałem po instalacji i z czym miałem problemy.
1. Wifi
W dobie wszechobecnej fali elektromagnetycznej wifi jest rzeczą powszechną. Co jednak zrobić, kiedy system po instalcji nie chce korzystać z tego dobrodziejstwa techniki. Po pierwsze trzeba sobie załatwić dostęp do internetu, a potem szukać rozwiązania.
Sterowniki miałem dobre. Sieci bezprzewodowe mi wykrywało ale nie chciało się podłączyć. Na początku szukałem przyczyny w sterownikach (jak się potem okazało był to zły trop). Przeszukując wzdłuż i wszerz napotkałem opis mojego problemu.
“Dioda od wifi włącza się i wyłącza podczas ładowania systemu”. Ta niby niepozorna wiadomość, była kluczem do rozwiązania. Wystarczyło tylko włączyć kartę (tak by dioda się świeciła) i wsio wifi działa :) A oto polecenie:
echo 1 | sudo tee /sys/devices/platform/asus-laptop/wlan
2. Zabawa z compizem
Compiz jest standardowo wbudowany w Ubu. Wystarczy mieć odpowiednie sterowniki do karty graficznej i można korzystać z jego dobrodziejstw, a naprawdę warto. Nawet jeśli nie jesteście fanem fajerwerków oraz wodotrysków jest w nim parę opcji, które ułatwia pracę.
3. Conky
Od kiedy pierwszy raz spotkałem się z tym skrypcikiem to zawsze towarzyszy on na moim pulpicie. Lubię mieć szybki podgląd do ogólnych statystyk systemu. A oto moja konfiguracja:
# UBUNTU-CONKY
# A comprehensive conky script, configured for use on
# Ubuntu / Debian Gnome, without the need for any external scripts.
#
# Based on conky-jc and the default .conkyrc.
# INCLUDES:
# – tail of /var/log/messages
# – netstat connections to your computer
#
# — Pengo (conky@pengo.us)
## Create own window instead of using desktop (required in nautilus)
own_window no
own_window_hints undecorated,below,skip_taskbar
background no
# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes
# fiddle with window
use_spacer yes
use_xft yes
# Update interval in seconds
update_interval 3.0
# Minimum size of text area
minimum_size 120 5
# Draw shades?
draw_shades no
# Text stuff
draw_outline no # amplifies text if yes
draw_borders no
uppercase no # set to yes if you want all text to be in uppercase
# Stippled borders?
stippled_borders 0
# border margins
border_margin 4
# border width
border_width 0
# Default colors and also border colors, grey90 == #e5e5e5
default_color white
default_shade_color black
default_outline_color white
own_window_colour brown
own_window_transparent yes
# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right
# Gap between borders of screen and text
gap_x 10
gap_y 10
# stuff after ‘TEXT’ will be formatted on screen
override_utf8_locale no
xftfont Terminus:size=8
xftalpha 0.8
TEXT
${color slate grey}Kernel: ${color }$kernel
${color slate grey}UpTime: ${color }$uptime
${color slate grey}CPU:${color }${offset 10}$freq[Mhz] ${acpitemp}[C]
${color slate grey}CPU1:${color }${offset 10}${cpu cpu1}[%] ${offset 15}
${cpugraph cpu1 20,170 000000 ffffff}
${color slate grey}CPU2:${color }${offset 10}${cpu cpu2}[%] ${offset 15}
${cpugraph cpu2 20,170 000000 ffffff}
${color slate grey}MEM: ${color } $memperc% $mem/$memmax
${membar 3,100}
${color slate grey}SWAP: ${color }$swapperc% $swap/$swapmax
${swapbar 3,100}
${color slate grey}ROOT: ${color }${fs_free /}/${fs_size /}
${fs_bar 3,100 /}
${color slate grey}HOME: ${color }${fs_free /home}/${fs_size /home}
${fs_bar 3,100 /home}
${color slate grey}NET:
${color}Up: ${color }${upspeed eth0} k/s ${offset 30}${color}Down: ${color }${downspeed eth0}k/s${color}
${upspeedgraph eth0 20,80 000000 ffffff} ${offset 10}${downspeedgraph eth0 20,80 000000 ffffff}
${color slate grey}WIFI:
${color}Up: ${color }${upspeed eth1} k/s ${offset 30}${color}Down: ${color }${downspeed eth1}k/s${color}
${upspeedgraph eth1 20,80 000000 ffffff} ${offset 10}${downspeedgraph eth1 20,80 000000 ffffff}
${color slate grey}Processes: ${color }$processes
${color slate grey}Running: ${color }$running_processes
${color slate grey}Highest CPU:
${color #ddaa00} ${top name 1}${top_mem cpu 1}
${color lightgrey} ${top name 2}${top cpu 2}
${color lightgrey} ${top name 3}${top cpu 3}
${color lightgrey} ${top name 4}${top cpu 4}
${color slate grey}Highest MEM:
${color #ddaa00} ${top_mem name 1}${offset 10}${top_mem mem 1}
${color lightgrey} ${top_mem name 2}${offset 10}${top_mem mem 2}
${color lightgrey} ${top_mem name 3}${offset 10}${top_mem mem 3}
${color lightgrey} ${top_mem name 4}${offset 10}${top_mem mem 4}
4. Dodatki
W tej chwili z dodatkowych programów potrzebowałem
5. Efekt końcowy
A na koniec dla osłody zamieszczam wygląd mojego obecnego miejsca pracy.
Posted by: riser on: luty 1, 2009
Witaj dziwny świecie pełen przyjaciół i wsparcia oraz bandy debili z którymi przyszło nam się spotykać. Właśnie nadszedł magiczny czas niczym oczekiwanie na prezenty pod choinką z młodych lat. Czy byliśmy grzeczni i dostaniemy prezent, czy może czeka na nas rózga? To wszystko się niedługo okaże. Sesja niczym zima zaskoczyła wszystkich studentów, którzy jak drogowcy są nieprzygotowani. Cała czasoprzestrzeń została zaburzona i pochłania resztki wolnego czasu jak czarna dziura światło. Jednak wspólnymi siłami można zdziałać cuda, “Bez przyjaciół jestem nikim, z nimi mogę wszystko”. To bardzo trafne stwierdzenie. Cieszy mnie to, że spotkałem tyle wspaniałych osób ale nawet najpiękniejsza róża ma kolce. Czemu niektórzy ludzie nie potrafią dorosnąć. Zachowują się tak jakby ich rozwój przebiegał w przeciwnym kierunku. Przykro mi się robi, kiedy widzę takie zachowanie jak grzesznik przestrzega innych grzeszników przed konsekwencjami, a sam nie stosuje się do tego co mówi. To mnie tylko utwierdza, że wszyscy jesteśmy dwulicowi. Szkoda słów na takich ludzi i świat jaki tworzą. Niedoceniając nakładu czasu oraz pracy wkładanego w rozwiązywanie różnych problemów, które dostrzegamy dopiero wtedy kiedy nam przeszkadzają. Czasem można by było oderwać się od codziennej sztywnej rutyny i zmienić swoją rolę w filmie. Spojrzeć na coś z innej strony i docenić osoby o których pracy/istnieniu wcześniej wiedzieliśmy mało albo nic. Może wtedy niektórym otworzy się umysł, trzeba tylko uważać by resztki człowieczeństwa nie zostały wywiane…
Najnowsze komentarze