Scene 2D: Action

Ini lanjutan dari posting pengantar Scene2D.

Sebelumnya kita sudah membuat stage dan menampilkan satu actor di dalam stage. Untuk melakukan aksi (bergerak, berotasi, berubah ukuran) pada Actor, Scene2D menyediakan class Action. Tersedia beberapa action standard yang dapat ditempelkan ke actor.

Pertama, kita akan menambahkan sedikit gerakan pada aktor. Tambahkan code berikut pada method create() di program sebelumnya (program di tutorial pertama).


public void create () {
        //...
        //... sama dengan code sebelumnya
        k.addAction(Actions.moveTo(400, 400, 2));
}

Jalankan, maka aktor akan bergerak ke posisi 400,400 selama 2 detik.

Satu actor dapat mengandung beberapa action dan setelah selesai dijalankan action otomatis akan “terlepas” dari actor. Meng-create object action setiap dibutuhkan tentu tidak efisien karena proses create objek adalah proses yang mahal (dari sisi komputasi dan memori). Untuk mengatasinya dapat digunakan class Actions (Action dengan huruf s). Dengan Actions, objek di-reuse dari pool tanpa harus dicreate terlebih dulu (jika tersedia).

Beberapa Action dapat digabung dengan method sequence, sebagai contoh, ganti baris sebelumnya dengan code berikut:

	k.addAction(Actions.sequence(Actions.moveTo(400,400, 2), Actions.delay(0.5f),
                    Actions.rotateTo(180, 2), Actions.scaleTo(1.5f, 1.5f, 2)));

Jalankan, maka setelah bergerak ke posisi 400,400 maka akan ada delay selama 0.5 detik dilanjutkan rotasi 180 derajat selama 2 detik dan membesar 1.5 kali dalam 2 detik. Perhatikan penggunaan method Actions.sequence yang berarti aksi dijalankan secara serial (berurutan). Gunakan Actions.parallel untuk menjalankan secara paralel (bersamaan), seperti code berikut:

k.addAction(Actions.parallel(Actions.moveTo(400,400, 3),
            Actions.rotateTo(180, 2), Actions.scaleTo(1.5f, 1.5f, 2)));

Ada juga penggunaan Actions.repeat untuk pengulangan aksi, sebagai contoh:

k.addAction(Actions.repeat(3,
                      Actions.sequence(
                         Actions.scaleTo(1.5f, 1.5f, 1),
                         Actions.scaleTo(0.5f, 0.5f, 1),
                         Actions.scaleTo(1f, 1f, 1)
                      )
                    ));

Selain itu terdapat Actions.forever() yang seperti repeat tanpa pernah berhenti.

Action FadeIn, FadeOut dan FadeTo digunakan untuk mengatur alpha (transparansi) dari actor. Sebagai contoh, untuk menghilangkan actor secara perlahan lalu memunculkannya kembali:

k.addAction(Actions.sequence(Actions.fadeOut(2),Actions.fadeIn(2)));

Action lain, rotateBy, scaleBy dan moveBy menggerakan actor secara relatif (perhatikan penggunaan “By” pada rotateBy bukan “To”). Sebagai contoh:

k.addAction(Actions.sequence(Actions.moveTo(400,400, 1),Actions.rotateTo(90, 2),Actions.rotateBy(90, 2)));

Code tersebut akan memutar actor 90 derajat, lalu memutar lagi 90 derajat. Coba ganti rotateBy dengan rotateTo, maka actor akan tetap diposisi 90 derajat.

Untuk mengubah ukuran dapat digunakan scaleTo, scaleBy, SizeTo dan SizeBy. Perbedaan antara scale dan size diperlihatkan pada contoh berikut. Code berikut membuat ukuran Actor menjadi dua kali lipat dalam 3 detik:

k.addAction(Actions.scaleTo(2,2,3));

Sedangkan code yang ini membuat ukuran Actor menjadi 100 x 50 pixel dalam 3 detik.

k.addAction(Actions.sizeTo(100,50,3));

Method removeActor digunakan untuk menghilangkan actor dari stage (kebalikan Stage.addActor()).

//bergerak lalu hilang

k.addAction(Actions.sequence(Actions.moveTo(200, 100, 2),Actions.removeActor()));

Gunakan action hide() dan show() jika hanya menginginkan actor menghilang sementara.

Action juga menyediakan efek seperti bouncing (memantul)

        //letakkan di atas
        k.setPosition(100, 200);
        //jatuhkan dan ada efek memantul
        k.addAction(Actions.moveTo(100, 50, 3, Interpolation.bounceOut));

Selain bouncing, terdapat juga interpolasi elastic, circle, exp10, exp5, fade. linear, pow2 sampai dengan pow5, sine dan swing.

Tutorial berikutnya membahas event touch pada actor

0 comments on “Scene 2D: Action

2 Pings/Trackbacks for "Scene 2D: Action"

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.