Akan tetapi kode tersebut kurang optimal, karena deteksi posisi masih terlalu luas, sehingga ketika kepala baru menyentuh titik terluar badan sudah dianggap sebagai
dropTarget,
sehingga lebih baik menggunakan metode pengukuran jarak agar akurasi lebih tepat. Untuk lebih jelasnya, perhatikan langkah berikut :
1. Lanjutkan file pada tutorial sebelumnya drag movieclip.
2. Klik frame 1 layer 2 buka panel Action F9 dan ubah kodenya menjadi sebagai
berikut :
1. var
awal_x :
Number =
kepala .
x ;
2. var
awal_y :
Number =
kepala .
y ;
3. 4.
kepala .
addEventListener MouseEvent
. MOUSE_DOWN
, pencetMouse
; 5.
kepala .
addEventListener MouseEvent
. MOUSE_UP
, lepasMouse
; 6.
7. function
pencetMouse e
: MouseEvent
: void
{ 8.
kepala .
startDrag ;
9. }
10. function
lepasMouse e
: MouseEvent
: void
{ 11.
kepala .
stopDrag ;
12. snap ke badan
13. var
jarak =
Math .
sqrt kepala
. x
- badan
. x
kepala .
x -
badan .
x +
kepala .
y -
badan .
y kepala
. y
- badan
. y
; 14.
if jarak
50 {
15. kepala
. x
= badan
. x
; 16.
kepala .
y =
badan .
y ;
17. }
else {
18. kepala
. x
= awal_x
; 19.
kepala .
y =
awal_y ;
20. }
21. }
3. Jalankan aplikasi dengan menekan Ctrl+Enter. Klik dan drag kepala panda
tersebut mendekati posisi yang tepat sekitar leher panda untuk menguji coba kode.
Penjelasan kode :
var awal_x:Number = kepala.x;
Pada awalnya kordinat x dan y dari movieclip kepala disimpan di dalam variabel awal_x dan awal_y. Hal ini dimaksudkan agar apabila
kepala tidak didrag pada posisi yang tepat, maka akan kembali ke posisi awal
103 kepala.addEventListenerMouseEvent.MOUSE_DOWN,pencetMouse;
Selanjutnya movieclip kepala diberikan listener ketika mouse ditekan. Ketika event terjadi yaitu ketika Mouse ditekan, maka fungsi pencetMouse akan dijalankan.
kepala.startDrag;
merupakan kode untuk memulai mode drag sebuah objek.
kepala.stopDrag;
merupakan kode untuk mengakhiri mode drag sebuah objek.
var jarak = Math.sqrt...;
merupakan perhitungan jarak menggunakan metode pitagoras yaitu akar dari selisih kuadrat jarak antara movieclip kepala dengan
movieclip badan.
if jarak 50{...}else {...}
merupakan kondisi untuk melakukan proses snap. Apabila jarak kurang dari 50 pixel maka posisi akan di snap, sedangkan jika lebih
akan dikembalikan ke posisi awal_x dan awal_y.
EnterFrame Event
Enterframe Event merupakan kejadian yang dilakukan secara berulang-ulang sejak inisialisasi listener sampai dengan dihentikannya listener atau aplikasi ditutup. Sebagai
contoh event ini digunakan untuk mendapatkan gerakan objek secara terus menerus. Perhatikan contoh berikut :
1. Buatlah sebuah file baru. Selanjutnya
buatlah sebuah movieclip “animasi burung”, dimana di dalamnya terdapat animasi burung mengepakkan sayap
secara frame by frame.
2.
Klik movieclip “animasi burung” tersebut kemudian buka panel properties dan ketikkan “burung” pada kolom instance name.
Gambar 137 . Movieclip dengan instance name “burung”
3. Buatlah sebuah layer baru layer 2. Klik frame 1 layer 2 buka panel Action F9
dan ketikan kode berikut :
1. function
terbang e
: Event
: void
{ 2.
var ob
: Object
= e
. currentTarget
; 3.
ob .
x +=
5 ;
4. }
5. 6.
burung .
addEventListener Event
. ENTER_FRAME
, terbang
;
4. Jalankan aplikasi dengan menekan Ctrl+Enter. Maka burung tersebut akan
bergerak ke kanan secara terus menerus sampai keluar dari layar. 5. Selanjutnya kita dapat menambahkan sedikit logika agar burung tersebut dapat
bergerak secara berulang ke kanan dan ke kiri. Ubah kode pada frame 1 layer 2 menjadi sebagai berikut :
1. var
kecepatan :
int =
5 ;
2. function
terbang e
: Event
: void
{ 3.
var ob
: Object
= e
. currentTarget
; 4.
ob .
x +=
kecepatan ;
5. if
ob .
x 600
|| ob
. x
100 {
6. kecepatan
= -
1 ;
7. ob
. scaleX
= kecepatan
Math .
abs kecepatan
; 8.
} 9.
} 10.
11. burung
. addEventListener
Event .
ENTER_FRAME ,
terbang ;
6. Jalankan kembali aplikasi dengan menekan Ctrl+Enter, dan burung akan
terbang secara berulang ke kanan dan ke kiri. Penjelasan program :
var kecepatan:int = 5;
merupakan deklarasi kecepatan burung. Nilai dari variabel ini bisa diubah secara dinamis ketika kondisi tertentu baris 5 terpenuhi.
function terbange:Event:void{...}
merupakan fungsi yang dijalankan secara berulang-ulang setelah kode addEventListener diaktifkan.
var ob:Object = e.currentTarget;
merupakan deklarasi variabel yang mengacu pada objek yang diperintah oleh eventListener, dimana dalam hal ini adalah movieclip
denga n instance name “burung”.