Kekhawatiran saya dengan salah satu pendekatan yang saat ini ditawarkan adalah bahwa keduanya akan menyebabkan berkedip 'kecepatan variabel', yang tidak hanya mengganggu bagi para pemain tetapi juga membuat sulit untuk mengukur dengan tepat berapa lama suatu benda telah tersisa sebelum hilang. . Sebaliknya, di suatu tempat di parameter Anda (apakah mereka menjadi global untuk penyaji atau pada basis per-objek) saya akan memiliki empat konstanta: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
dan fastBlinkRate
. Saat merender, jika sisa umur objek Anda kurang dari fastBlinkTime
, maka kedipkan di fastBlinkRate
; jika tidak, jika kurang dari slowBlinkTime
, maka blink di slowBlinkRate
. Jika Anda ingin melangkah lebih jauh maka Anda dapat memiliki berbagai blinkTime
s danblinkRate
dan memeriksanya satu per satu, tetapi dalam praktiknya itu mungkin berlebihan dan hanya memiliki status 'peringatan' dan 'kritis' sudah cukup. Kode akan terlihat seperti ini:
float blinkCycle;
if ( entity.timeLeft < fastBlinkTime ) {
blinkCycle = entity.timeLeft/fastBlinkRate;
} else if ( entity.timeLeft < slowBlinkTime ) {
blinkCycle = entity.timeLeft/slowBlinkRate;
}
blinkCycle = blinkCycle - floor(blinkCycle); // find blinkCycle 'mod 1'
if ( (entity.timeLeft < slowBlinkTime) && (blinkCycle < 0.5f) ) {
renderBlinked(entity); // this should be the 'blinked' state, whether flashed or missing
} else {
renderNormal(entity); // the normal render for the entity
}
Perhatikan bahwa kode ini mengandaikan siklus blink setengah aktif dan setengah mati (itulah yang 0.5f
diwakili dalam tes), tetapi dapat dengan mudah diubah untuk sekitar dua pertiga aktif, sepertiga off hanya dengan mengubah konstanta yang sesuai. Ini juga tidak melakukan apa pun untuk 'menyinkronkan' berkedip antara keadaan cepat dan lambat, tapi itu relatif mudah untuk dipoles.
Ini harus mudah untuk dihubungkan, dan itu akan memiliki keuntungan substansial IMHO bahwa pemain akan dapat melihat beralih dari 'lambat' ke 'cepat' berkedip dan tahu persis berapa lama mereka telah pergi. Saya akan mulai dengan nilai parameter seperti 5s untuk slowBlinkTime
dan 0.5s untuk slowBlinkRate
, dan 2s / 0.25s untuk fastBlinkTime
dan fastBlinkRate
, tapi itu pasti tergantung pada permainan khusus Anda.