Jika Anda sudah sukses mengambil data dari database, sekarang kita perlu mengubahnya on the fly dengan metode drag and drop. Pada bagian ini kita akan fokus kepada variabel posx, posy, di objek.
Metode Drag and Drop
Secara sederhana, metode ini memakai "onPress" untuk drag dan "onRelease" untuk stop drag.
Kita ambil contoh untuk satu objek dulu, yakni "obj0".
atau untuk kemudahan, karena kita memerlukan metode drag and drop yang sama pada beberapa movieclip, drag and drop dibuat sebagai fungsi:
Kode di atas dan bawah mempunyai hasil yang sama. Bedanya, dengan cara kedua kita bisa mudah menambahkan fungsi untuk objek lain, seperti ini.
obj0.onPress=dragme;
obj1.onPress=dragme;
obj2.onPress=dragme;
atau lebih singkat lagi:
obj0.onPress=obj1.onPress=obj2.onPress=dragme;
Coba tes preview. Sekarang Anda sudah bisa melakukan drag and drop.
Update Posisi X, Y Movieclip
Kembali ke objek di stage ("obj0".."obj2"), yang berisi dynamic text dengan nama variabel (bukan nama instance!) myid, hal, topik, sect. Tambahkan dua dynamic text. Masing bernama variabel: "posx" dan "posy" atau boleh saja buat nama instance.
Inilah variabel yang akan kita kirim ke database untuk di-update.
Untuk melihat perubahan posisi x y objek, kita perlu mengecek perubahan yang terjadi setiap saat dengan onEnterFrame.
Masukkan gambar tank di salah satu layer. Di bawah layer dynamic text jika ingin teksnya tidak tertimpa.
Coba drag dan drop "obj0", kita akan melihat perubahan x y di dynamic text-nya.
:: LoadVars Update Posisi
Di stage, actionscriptu ntuk mengirim variabel "obj0" ke database dengan LoadVars:
Fungsi update() di atas belum dieksekusi karena tidak ada pemicu eventnya. Karena kita menginginkan variabel pada "obj0" dalam objek LoadVars dikirim setelah drop maka tambahkan fungsi dragNo, menjadi:
function dragNo() {
stopDrag();
update();
}
Begitu selesai drag, variabel di database dengan id "obj0", yakni baris pertama di database, akan diubah dengan "updpospx.php". Ini dia isinya:
Coba tes. Anda sudah bisa meng-update posisi x y "obj0".
Lakukan hal yang sama dengan "obj1" dan "obj2" dengan LoadVars yang berbeda menurut objek. Eit, tunggu dulu, ada cara yang lebih baik dan mudah. Ambil segelas air putih untuk menyegarkan kerongkongan dan baca bagian selanjutnya.
Cara Mudah dengan Movieclip Generik
Dari pembahasan sebelumnya kita sudah dapat gambaran bahwa:
- Ketiga objek mengambil variabel yang sama dari database, berdasarkan 3 row (yang diidentifikasi berurutan mulai 0,1, dan 2)
- Ketiga objek punya nama sama ("obj") hanya berbeda urutan.
- Ketika objek punya x y yang berubah mengikuti fungsi yang sama juga: drag dan drop.
- Variabel yang sama dari masing-masing objek akan dikirimkan ke database dengan metode update yang sama (yang berbeda hanya objek di stage).
Lalu, mengapa tidak membuat satu movieclip dan satu objek LoadVars untuk update yang bisa dipakai bersama?
Pertama, buat satu objek generik. Boleh mengambil "obj0" sebagai prototipe. Buang gambar tank dari dalamnya. Sekarang Anda hanya punya movieclip yang berisi beberapa dynamic text.
Kedua, buang semua actionscript kecuali actionscript di tutorial 1 untuk mengambil data.
Ketiga, tarik movieclip generik ini ke stage dengan nama instance "obj0", "obj1", "obj2". Isi dan bentuknya sama.
Keempat, karena memakai satu movieclip, kita perlu membuat referensi nama objek di stage untuk kode LoadVars dan perubahan posisi x y. Artinya, Flash harus tahu variabel yang dikirim berasal dari objek yang mana, apakah "obj0" atau "obj1" atau "obj2".
Masuk ke dalam salah satu movieclip, tidak masalah yang mana, karena isinya sama. Di layer actionscript dalam movieclip generik, kasih kode:
"objnr" adalah variabel kita untuk nomor objek. Definisinya adalah karakter urutan ke-4 sampai ke-7 dari nama objek di stage ("obj0", "obj1", "obj2").
Karena objek ada di stage, kita harus merujuknya dengan "this._parent" atau "_root" (_root is evil, bikin bingung, kata banyak orang, jadi tidak kita pakai).
Jika objek yang sedang aktif (di-drag) adalah "obj0", maka "objnr" sama dengan 0 (tiga karakter awal dibuang). objnr=1 untuk "obj1" dst. Jika ada banyak objek, misalnya ada "obj234" maka objnr=234; jika "obj234567", objnr=2345 karena kita hanya mengambil sampai urutan ke-7.
Jadi, jika nama akhirnya cuma ada dua karakter di belakang nama awal, "substring(this._name, 4, 5);" sudah cukup.
Dengan cara itu maka objStage (objek di Stage) akan dikenali sebagai "obj0" atau "obj2345" tergantung karakter ke-4 sampai 7. Mengapa harus begini, kenapa tidak langsung saja "this._parent.obj0"? Karena kita akan memuat kode LoadVars di dalam movieclip generik dan kita tidak bisa memakai "this" di dalam LoadVars.
Kemudian, masukkan kode onEnterFrame, fungsi drag, dan LoadVars di bawahnya sehingga kode utuh di dalam movieclip generik menjadi:
Terakhir, kita perlu memasukkan gambar tank. Buat linkage id setiap movieclip gambar berurutan, caranya dengan klik kanan objek di Library lalu pilih "linkage", cek "export for actionscript" dan namakan misalnya "tank0", "tank1", "tank2".
Buat movieclip kosong, lalu masukkan ke dalam movieclip generik. Nama instancenya: "nol".
Di frame yang sama dengan kode di atas, masukkan kode ini:
this.nol.attachMovie("tank"+objnr, "tank"+objnr, objnr);
Dengan begini, setiap movicelip "nol" yang ada di setiap objek di stage akan mengambil objek di Library berdasarkan kesesuaian nomor objek. "obj0.nol" akan mengambil "tank0", "obj1.nol" akan mendapat "tank1" dst.
Done. Tes Preview.
Semoga berhasil.
Sebelumnya: Save Posisi Objek dengan Flash, PHP, MySQL(1)


