Advertisement
  1. Code
  2. ActionScript

Membuat Alat pemutar (Rotator) Gambar di Flash menggunakan XML dan ActionScript 3.0

Scroll to top
Read Time: 10 min

() 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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.