Mối quan tâm của tôi với một trong hai cách tiếp cận hiện được đưa ra là cả hai sẽ dẫn đến nháy mắt 'tốc độ biến đổi', điều này không chỉ gây mất tập trung cho người chơi mà còn khiến người ta khó có thể đánh giá chính xác thời gian một vật thể còn lại trước khi nó biến mất . Thay vào đó, ở đâu đó trong các thông số của bạn (cho dù họ có tính toàn cầu cho các renderer hoặc trên một cơ sở cho mỗi đối tượng) Tôi sẽ có bốn hằng số: slowBlinkTime
, slowBlinkRate
, fastBlinkTime
và fastBlinkRate
. Khi kết xuất, nếu tuổi thọ còn lại của đối tượng của bạn nhỏ hơn fastBlinkTime
, thì hãy nhấp nháy nó fastBlinkRate
; nếu không thì ít hơn slowBlinkTime
, sau đó nháy mắt với nó slowBlinkRate
. Nếu bạn muốn tiến thêm một bước thì bạn có thể có một loạt các blinkTime
s vàblinkRate
s và kiểm tra từng cái một, nhưng trong thực tế có khả năng là quá mức cần thiết và chỉ cần có các trạng thái 'cảnh báo' và 'quan trọng' là đủ. Mã sẽ trông giống như thế này:
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
}
Lưu ý rằng mã này giả sử chu kỳ chớp mắt nửa bật, nửa tắt (đó là những gì 0.5f
trong bài kiểm tra thể hiện), nhưng có thể dễ dàng được điều chỉnh cho một cái gì đó như hai phần ba, một phần ba chỉ bằng cách điều chỉnh hằng số thích hợp. Điều này cũng không làm gì để 'đồng bộ hóa' nhấp nháy giữa trạng thái nhanh và chậm, nhưng điều đó tương đối đơn giản để đánh bóng.
Điều này rất đơn giản để cắm vào và nó sẽ có lợi thế đáng kể cho IMHO khi người chơi có thể thấy chuyển đổi từ 'chậm' sang 'nhanh' và biết chính xác họ còn bao lâu. Tôi sẽ bắt đầu với các giá trị tham số như 5s cho slowBlinkTime
và 0,5 slowBlinkRate
giây và 2 giây / 0,25 cho fastBlinkTime
và fastBlinkRate
, nhưng điều đó hoàn toàn phụ thuộc vào trò chơi cụ thể của bạn.