Membuat Alat pemutar (Rotator) Gambar di Flash menggunakan XML dan ActionScript 3.0
() translation by (you can also view the original English article)
Dalam tutorial ini anda akan belajar bagaimana cara membuat rotator gambar sederhana dari awal menggunakan Flash, XML dan ActionScript 3.0
Tahap 1 : Gamabran Singkat
Rotator gamabr ini di buat hampir seluruhnya dari kode saja.
selama tahap pertama kita akan mengatur properti file Fla dan menanamkan beberapa font untuk membuat informasi gambar tampak lebih baik. Kami juga menambahkan preloader untuk menunjukan transisi otomatis dari gambar.
Tahap 2 : Mempersiapkan.
Buka Flash dan buat File Flash Baru (ActionScript 3.0)

Atur ukuran Stage ke 600 x 300 px dan kecepatan frame ke 24 fps.

Tahap 3 : Sematkan Huruf
Untuk memberikan tampilan yang lebih baik ke aplikasi kita, kita akan menggunakan font yang tertanam.
Buka Library Panel (Cmd+L) dan klik kanan aream item untuk membuka menu context.

Pilih New Font dan pilih fon yang anda suka. ingatlah untuk memilih ukuran yang sebenarnya yang akan gunakan dalam film.



saya menggunakan Helvetica Bold untuk gambar judul dan FFF Harmony untuk deskripsi.



Tahap 4 : Preloader
MovieClip preloader akan digunakan sebagai indikasi kemajuan, ini akan memberi tahu pengguna bahwa gambar diputar secara otomatis.



Dalam contoh ini, saya menggunakan Apple Inspired Preloader yang telah kami buat sebelumnya di ActiveTuts+. Kita akan menggunakan animasi, jadi tidak perlu menyalin kode. Kode kita akan beralih ke gambar berikutnya setiap loop animasi preloader.
Tahap 5 : Dapatkan beberapa gambar
Ini tidak akan menjadi Rototar gambar tanpa gambar, jadi pilihlah gambar dari koleksi pribadi anda atau unduh beberapa gambar untuk pengujian.
ini adalah gambar dari demi, yang didapat ari Flickr, semuanya dengan lisensi Creative Commons.



Grass 01 dari 100kr



deep impact on planet color dari spettacolopuro



Yosemite : fall colours dari tibchris
gamabr telah di ubah ukuranya ke 600x300 px agar sesuai dengan ukuran film.
Tahap 6 : menulis denggan XML
File XML akan dimuat oleh aplikasi; file ini akan berisi semua informasi tentang gambar, seperti Judul, URL gambar dan Deskripsi.
Buka editor favorit anda dan tulis :
1 |
<?xml version="1.0"?>
|
2 |
<images>
|
3 |
<image title="Grass 01" src="images/Grass.png" description="Photo by: 100kr on Flickr"/> |
4 |
<image title="Deep Impact on Planet Color" src="images/Water.png" description="Photo by: spettacolopuro on Flickr"/> |
5 |
<image title="Yosemite: Fall Colours" src="images/Yosemite.png" description="Photo by: tibchris on Flickr"/> |
6 |
</images>
|
Tahap 7 : Membuat Class dokumen
Buat Dokumen ActionScript baru dan simpan pada ImageRotator.as.

Tahap 8 : Impor class yang diperlukan
Ini adalah Class yang diwajibkan. untuk deskripsi ynag lebih rinci untuk setiap class, silahkan merujuk ke Help (tekan F1 dalam Flash).
1 |
package
|
2 |
{
|
3 |
|
4 |
import fl.transitions.Tween; |
5 |
import fl.transitions.easing.Strong; |
6 |
import fl.transitions.TweenEvent; |
7 |
|
8 |
import flash.display.Sprite; |
9 |
import flash.net.URLLoader; |
10 |
import flash.net.URLRequest; |
11 |
import flash.display.Loader; |
12 |
import flash.text.TextField; |
13 |
import flash.text.TextFormat; |
14 |
import flash.text.TextFieldAutoSize; |
15 |
import flash.text.AntiAliasType; |
16 |
import flash.utils.Timer; |
17 |
import flash.events.TimerEvent; |
18 |
import flash.events.Event; |
19 |
import flash.events.MouseEvent; |
Tahap 9 : Mulai Class
Memperluas definisi kata kuncisebuah class adalah sub class dari class lain. sub-class memiliki metode, properti dan fungsi, dengan cara itu kita adapat menggunakan class kita.
kita akan membuat class dokumen, memperluas Sprite karena tidak memerlukan timeline.
1 |
public class ImageRotator extends Sprite |
2 |
{
|
Tahap 10 : Deklarasi Variabel
ini adalah variabel yang kita gunakan. masing-masing dijelaskan dalam komentar.
1 |
private var xml:XML; // Stores the xml file info |
2 |
private var urlLoader:URLLoader; //Loads the url of the xml file |
3 |
private var imagesVector:Vector.<Loader> = new Vector.<Loader>(); //Stores the images loaded in the Loader object |
4 |
private var imagesCounter:int = 0; |
5 |
private var tween:Tween; |
6 |
private var lastTarget:*; //Gets the last clicked image, in manual transition mode |
7 |
private var tweening = false; |
8 |
private var infoCounter:int = 0; //Changes the xml info to display |
9 |
private var infoPanel:Sprite = new Sprite(); |
10 |
private var titleField:TextField = new TextField(); |
11 |
private var description:TextField = new TextField(); |
12 |
private var titleFormat:TextFormat = new TextFormat(); |
13 |
private var descriptionTF:TextFormat = new TextFormat(); |
14 |
private var timer:Timer; |
15 |
private var preloader:Preloader = new Preloader(); //The Preloader in the Library |
16 |
private var added:Boolean; //Checks if the preloader is in stage |
17 |
|
18 |
private var titleFont:Helvetica = new Helvetica(); //Instantiate Embedded fonts |
19 |
private var bitmapFont:Harmony = new Harmony(); |
tahap 11 ; menulis Fungsi Constructor
Constrctor adalah fungsi yang berjalan ketika suatu objek yang dibuat dari class. Kode ini adalah yang pertama kali dieksekusi ketika kita membuat instance objek run menggunakan Class dokumen. dalam hal ini akan menjadi kode pertama yang dijalankan ketika SWF kami mulai.
Parameter awal memiliki nilai default; ini akan memungkinkan kita menggunakan class sebagai class dokumen dan sebagi contoh.
Parameternya adalah URL File XML dan waktu objek akan menunggu untuk transisi di antara gambar; nomor ini harus lebih tinggi dari durasi transisi Tween (satu detik secara default)
1 |
public function ImageRotator(xmlPath:String = "images.xml", interval:int = 2000):void |
2 |
{
|
Tahap 12 : Menulis Kontruksi Kode
Kode ini termasuk dalam konstruktor. ini memulai timer, mengatur mengatur format teks default untuk bidang teks dan memanggil fungsi load XML.
1 |
timer = new Timer(interval); |
2 |
|
3 |
titleFormat.bold = true; |
4 |
titleFormat.font = titleFont.fontName; |
5 |
titleFormat.color = 0xFFFFFF; |
6 |
titleFormat.size = 14; |
7 |
|
8 |
descriptionTF.font = bitmapFont.fontName; |
9 |
descriptionTF.color = 0xEEEEEE; |
10 |
descriptionTF.size = 8; |
11 |
|
12 |
titleField.defaultTextFormat = titleFormat; |
13 |
titleField.autoSize = TextFieldAutoSize.LEFT; |
14 |
titleField.embedFonts = true; |
15 |
titleField.antiAliasType = AntiAliasType.ADVANCED; |
16 |
|
17 |
description.defaultTextFormat = descriptionTF; |
18 |
description.autoSize = TextFieldAutoSize.LEFT; |
19 |
description.embedFonts = true; |
20 |
|
21 |
loadXML(xmlPath); |
22 |
}
|
Tahap 13 : Load File XML
Fungsi ini menggunakan objek URLLoader untuk memuat file XML yang ditentukan dalam parameter konstruktor. Fungsi parseXML (pada langkah berikutnya) diatur untuk mengeksekusi ketika load selesai.
1 |
private function loadXML(file:String):void |
2 |
{
|
3 |
urlLoader = new URLLoader(new URLRequest(file)); |
4 |
urlLoader.addEventListener(Event.COMPLETE, parseXML); |
5 |
}
|
Tahap 14 : Parse File XML
Data XML ditugaskan pada objek xml dan fungsi untuk memuat gambar disebut.
1 |
private function parseXML(e:Event):void |
2 |
{
|
3 |
xml = new XML(e.target.data); |
4 |
loadImages(); |
5 |
}
|
Thapa 15 : Memuat Gambar.
untuk sebuat pernyataan digunakan untuk mendapatakan jumlah gambar dari XML, memuat gambar menggunakan objek Loader dan menyimpan Loader dalam objek vektor, yang didefinisikan sebelumnya. Ketika memuat gambar selesai, fungsi sortlmages di eksekusi.
1 |
private function loadImages():void |
2 |
{
|
3 |
for (var i:int = 0; i < xml.children().length(); i++) |
4 |
{
|
5 |
var loader:Loader = new Loader(); |
6 |
|
7 |
loader.load(new URLRequest(xml.children()[i].@src)); |
8 |
|
9 |
imagesVector.push(loader); |
10 |
|
11 |
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, sortImages); |
12 |
|
13 |
}
|
14 |
}
|
Tahap 16 : Sortir Gambar
Fungsi ini menambahkan gambar ke stage dan mengurutkanya; ketika semua gambar dimuat, itu akan memanggil fungsi yang membuat panel informasi dan mouse listeners.
1 |
private function sortImages(e:Event):void |
2 |
{
|
3 |
imagesCounter++; |
4 |
|
5 |
for (var i:int = imagesVector.length - 1; i >= 0; i--) //go backwards... |
6 |
{
|
7 |
addChild(imagesVector[i]); //...so that images at the start of the XML end up at the front |
8 |
}
|
9 |
|
10 |
if (imagesCounter == imagesVector.length) //If all images are loaded |
11 |
{
|
12 |
createInfoPanel(); |
13 |
timer.addEventListener(TimerEvent.TIMER, autoChange); |
14 |
timer.start(); |
15 |
addPreloader(); |
16 |
addActions(); |
17 |
}
|
18 |
}
|
Tahap 17: menambahkan Mouse Listener ke Gambar.
Kami menggunakan for stetmen untuk mengatur mouse listeners di setiap gambar. ini adalah bentuk kontrol yang sangat sederhana; ketika pengguna mengklik sebuah gambar, fungsi handler perubah gambar akan di panggil.
1 |
private function addActions():void |
2 |
{
|
3 |
for (var i:int = 0; i < imagesVector.length; i++)//Gets the number of images |
4 |
{
|
5 |
//Sets the listener, changeImage function will be executed when an image is clicked
|
6 |
imagesVector[i].addEventListener(MouseEvent.MOUSE_UP, changeImage); |
7 |
}
|
8 |
}
|
Tahap 18 : Transisi Manual
Kode ini akan berjalan ketika pengguna mengklik sebuah gambar. baca komentar dalam kode untuk lebih detailnya.
1 |
private function changeImage(e:MouseEvent):void |
2 |
{
|
3 |
timer.stop(); //Stop the timer |
4 |
|
5 |
if(added) //Check if the preloader is in stage, if true, removes it, if already removed, nothing happens |
6 |
{
|
7 |
removeChild(preloader); |
8 |
added = false; |
9 |
}
|
10 |
|
11 |
if (! tweening) //If a transition is not in progress |
12 |
{
|
13 |
lastTarget = e.target; //Get the clicked image |
14 |
tween = new Tween(e.target,"alpha",Strong.easeOut,1,0,1,true); //Start a transition |
15 |
tween.addEventListener(TweenEvent.MOTION_FINISH, changeDepth); //The image will change its depth when the transition is done |
16 |
tweening = true; //Indicates a transition is in progress |
17 |
|
18 |
infoCounter++; //Changes the child that will be loaded from the xml |
19 |
|
20 |
if (infoCounter >= xml.children().length()) //If the infoCounter is grater than the total number of images |
21 |
{
|
22 |
infoCounter = 0; //Reset |
23 |
titleField.text = xml.children()[infoCounter]. @ title; //Apply changes to text fields |
24 |
description.text = xml.children()[infoCounter]. @ description; |
25 |
}
|
26 |
else
|
27 |
{
|
28 |
titleField.text = xml.children()[infoCounter]. @ title; //Apply changes to text fields |
29 |
description.text = xml.children()[infoCounter]. @ description; |
30 |
}
|
31 |
}
|
32 |
}
|
Tahap 19 : Memindahkan Gambar untuk Kembali.
Transisi antar gambar didasrkan pada alpha tween, jadi anda akan melihat gambar berikutnya ketika transisi telah selesai. Namun jika anda mengkliknya, anda akan mengklik gambar yang sama seperti sebelumnya, meskipun itu tidak terlihat. ini akan memperbaikinya.
1 |
private function changeDepth(e:TweenEvent):void //When the alpha is 0 |
2 |
{
|
3 |
setChildIndex(lastTarget, 0); //move the image so it is behind the others |
4 |
lastTarget.alpha = 1; //Restore its visibility |
5 |
tweening = false; //Mark the tween as being complete |
6 |
}
|
Tahap 20 : Menulis Panel Informasi
ini akan membuat panel semi transparan, dengan teks yang dihasilkan dari Judul XML dan Tags deskripsi.
1 |
private function createInfoPanel():void |
2 |
{
|
3 |
//Draw a black rectangle with 50% alpha
|
4 |
infoPanel.graphics.beginFill(0x000000, 0.5); |
5 |
infoPanel.graphics.drawRect(0, 0, 600, 50); |
6 |
infoPanel.graphics.endFill(); |
7 |
|
8 |
//Position and set the value of the title field
|
9 |
titleField.text = xml.children()[infoCounter]. @ title; |
10 |
titleField.x = 5; |
11 |
titleField.y = 5; |
12 |
|
13 |
//Position and set the value of the description field
|
14 |
description.text = xml.children()[infoCounter]. @ description; |
15 |
description.x = 7; |
16 |
description.y = 22; |
17 |
|
18 |
infoPanel.y = 250; //Position this panel in the bottom |
19 |
|
20 |
//Add the children
|
21 |
infoPanel.addChild(titleField); |
22 |
infoPanel.addChild(description); |
23 |
|
24 |
addChild(infoPanel); |
25 |
}
|
Tahap 21 : Menangani Transisi Otomatis
Kode ini menangani tansisi otomatis; itu dipicu oleh objek TIMER.
1 |
private function autoChange(e:TimerEvent):void |
2 |
{
|
3 |
infoCounter++; //Changes the child that will be loaded from the xml |
4 |
|
5 |
lastTarget = imagesVector[xml 1="-" 2="infoCounter" language=".children().length()"][/xml]; //Gets the last image that was tweened |
6 |
tween = new Tween(imagesVector[xml 1="-" 2="infoCounter" language=".children().length()"][/xml],"alpha",Strong.easeOut,1,0,1,true); //Creates an alpha tween |
7 |
|
8 |
/* The same actions of the manual transition, change info etc. */
|
9 |
|
10 |
tween.addEventListener(TweenEvent.MOTION_FINISH, changeDepth); |
11 |
tweening = true; |
12 |
|
13 |
if (infoCounter >= xml.children().length()) |
14 |
{
|
15 |
infoCounter = 0; |
16 |
titleField.text = xml.children()[infoCounter]. @ title; |
17 |
description.text = xml.children()[infoCounter]. @ description; |
18 |
}
|
19 |
else
|
20 |
{
|
21 |
titleField.text = xml.children()[infoCounter]. @ title; |
22 |
description.text = xml.children()[infoCounter]. @ description; |
23 |
}
|
24 |
}
|
Tahap 22 : Posisikan MovieClip Preloader
Potongkan tambahan skrip ini dan letakan preloader.
1 |
private function addPreloader():void |
2 |
{
|
3 |
added = true; |
4 |
|
5 |
preloader.scaleX = 0.08; |
6 |
preloader.scaleY = 0.08; |
7 |
|
8 |
preloader.x = (600 - preloader.width/2) - 12; |
9 |
preloader.y = (300 - preloader.height/2) - 12; |
10 |
|
11 |
addChild(preloader); |
12 |
}
|
13 |
}
|
14 |
}
|
Ini melengkapi class ImageRotator
Tahap 23 : Menggunkan Class
Ada dua cara menggunakan Class ini. anda dapat menggunakan kode anda sebagai instans atau sebagai kelas dokumen dengan parameter default yang kita atur sebelumnya.
jika anda memilih untuk membuat instan kelas ini dan menggunakan kode anda, ini adalah contoh cara untuk menggunakanya.
1 |
import ImageRotator; |
2 |
|
3 |
var ir:ImageRotator = new ImageRotator("images.xml", 1100); |
4 |
|
5 |
addChild(ir); |
dengan cara ini anda dapat mengatur file XML yang akan di muat dan interval transisi tanpa perlu edit kode class
kalau tidak bisa, lihat tahap selanjutnya.
tahap 24 : menggunakan dokumen Class
di file .fla, buka panel properti dan tulis ImageRotator di bidang Class. ingat! ini akan menggunakan parameter dafault.
kesimpulan
ini ahnya contor dari rotator gambar dan cara yang baik untuk mulai membuat galeri gambar yang menakjubkan.
terima kasih telah membaca.