Saya tidak begitu yakin bagaimana sebenarnya cara orang membuat animasi di java seperti menerjemahkan kotak di layar. Ketika saya mencoba mengubah posisi persegi panjang menggunakan perulangan for, semuanya dieksekusi secara instan dan saya berakhir dengan koordinat akhir persegi panjang. Jadi yang ingin saya ketahui adalah bagaimana orang mencapai animasi halus ini dari waktu ke waktu dan jika saya ingin membuat kelas animasi khusus untuk alasan apa pun, bagaimana cara menambahkan penundaan agar muncul sebagai animasi alih-alih perubahan posisi instan di Java?
Bagaimana cara kerja animasi di java? [tertutup]
Jawaban (2)
Anda cukup menyimpan posisi x dan y persegi panjang. Kemudian jalankan perulangan while di mana Anda memeriksa apakah jangka waktu tertentu telah berlalu. Jika sudah, tambahkan variabel posisi.
Kode (akan memerlukan sedikit penyesuaian untuk memenuhi kebutuhan Anda):
int tick = 500; //set this to whatever you want
long lastTime = System.currentTimeInMillis();
while(true) {
long currTime = System.currentTimeInMillis();
if (currTime > lastTime + tick) {
lastTime = currTime;
x = x + 1; //replace this with your object's position
}
}
person
nhouser9
schedule
13.05.2016
Hai, itu berhasil, terima kasih tapi saya punya pertanyaan singkat. Hal ini dijalankan di thread terpisah, benar? Bagaimana jika saya ingin membuat 10 animasi berbeda, apakah saya memerlukan 10 thread agar dapat berfungsi dan bagaimana saya melakukannya ketika komputer saya hanya memiliki 8? Saya hanya ingin menguji.
- person AnotherRandomUser; 13.05.2016
Pertama, Anda masih bisa membuat 10 thread pada mesin dengan 8 core. Komputer akan mengabstraksinya dan menjalankan thread pada inti yang sama secara paralel. Kedua, Anda tidak HARUS menjalankan ini di thread terpisah, tapi itu ide yang bagus.
- person nhouser9; 13.05.2016
Berhati-hatilah karena bergantung pada kerangka kerjanya, Anda dapat mengambil risiko kondisi balapan antara ticker dan perender (atau jika Anda menjalankan thread peristiwa, cegah interaksi lebih lanjut dengan UI)
- person MadProgrammer; 13.05.2016
@AnotherRandomUser Gunakan satu utas yang menghasilkan tanda centang pada keadaan konstan, izinkan semua animasi lain mengamati ini dan membuat perubahan yang sesuai, TimingFramework bekerja dengan cara ini.
- person MadProgrammer; 13.05.2016
Anda dapat menambahkan penundaan dengan menggunakan metode Thread.sleep(long millis) yang akan menghentikan eksekusi thread saat ini dengan jumlah milidetik yang ditentukan. Namun mungkin ada cara yang lebih baik.
person
Pyrrhic
schedule
13.05.2016
Hai, terima kasih atas jawabannya tetapi saya tidak begitu yakin thread.sleep adalah pilihan terbaik karena katakanlah Anda sedang membuat menu, bukan? Bagaimana jika Anda memberi tahu thread untuk tidur untuk beberapa animasi, tetapi bagaimana responsnya terhadap klik pengguna jika tidur?
- person AnotherRandomUser; 13.05.2016
Saya tidak percaya itu bisa mendaftarkan klik pengguna saat sedang tidur.
- person Pyrrhic; 13.05.2016
Ya, kurasa begitu. Saya telah mencoba mencari di Google tentang bagaimana hal ini akan dilakukan tetapi sejauh ini saya belum menemukan apa pun dan saya telah mencari selama lebih dari satu jam sebelum datang ke sini dan mengajukan pertanyaan.
- person AnotherRandomUser; 13.05.2016
@DogeOverlord Itu akan menimbulkan banyak asumsi, jika Anda memanggil
Thread.sleep
di thread utama atau acara kerangka kerja, maka ya, itu akan menyebabkan UI berhenti merespons
- person MadProgrammer; 13.05.2016
rectangle.x = (System.currentTimeInMillis() - startTimeInMillis) * 0.5 + 10;
setiap beberapa milidetik. Atau hanya menjalankanrectangle.x += 2;
setiap beberapa milidetik. - person user253751   schedule 13.05.2016