Tôi đang làm việc với dự án Flash đầu tiên của mình và đối với trình tải trước của tôi, tôi muốn thực hiện một gradient đơn giản dựa trên tỷ lệ phần trăm được tải. Trình tải trước nói "77% đã tải ...", trong đó số 77 là một phiên bản văn bản động được gọi là percentLoaded. Tôi muốn textColor của percentLoaded thay đổi trên một gradient từ # 000000 thành #FFFFFF, với thang màu xám.Độ dốc RGB dựa trên tỷ lệ phần trăm của tệp được tải
Vì vậy, tôi có thể không chỉ đơn giản làm:
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
này chỉ chuyển đổi Format để một bội số của FFFFFF, nhưng kết quả đầu ra một màu sắc vì nó không phải là ba thành phần riêng biệt. Hiện nay, đây là những gì tôi đã có:
percentLoaded.text=currentValue.toString();
percentLoaded.textColor=rgb2hex((currentValue/100)*255, (currentValue/100)*255, (currentValue/100)*255);
đâu "rgb2hex" là một chức năng được xác định trong phạm vi lớp học như vậy:
public function rgb2hex(r:Number, g:Number, b:Number) {
return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
}
Nó không giống như thế này thực sự là thay đổi màu sắc của phông chữ mặc dù. Tôi đã nhập khẩu flash.text.TextField và flash.display.MovieClip, nhưng tôi không chắc chắn nếu tôi thiếu một cái gì đó khác. Điều này sẽ dễ dàng hơn để làm với chuỗi nối? Hoặc là có thể một cái gì đó đang xảy ra với currentValue/100 và đi qua đó như là một số?
Nếu tò mò, tôi đã tìm thấy mã cho rgb2hex here.
Cảm ơn!
Điều này không hiệu quả. thử đặt currentValue thành 1. Bạn nhận được 0x28f5c. bạn cần phải cast ((currentValue/100) * 0xFF) vào một int trước khi nhân với 0x010101. – Ponkadoodle
Đúng, tôi quên mất điều đó, đã sửa; cảm ơn vì đã chú ý điều đó! Các diễn viên thực sự cần phải đi vào kết quả phân chia, vì đó là lý do tại sao nó xảy ra - lớp 'Số' của Flash là một phao IEE. Truyền đến uint nên giải quyết nó. – LiraNuna
Không, giá trị hiện tại là từ 0-100. Nếu bạn cast sau khi chia, nhưng trước khi nhân với 0xFF, bạn sẽ nhận được 0 hoặc 1. Anh ta muốn màu xám đầy đủ, không chỉ đen/trắng. Và vấn đề không phát sinh từ điểm không chính xác nổi. Đó là vì định dạng của bạn (* 0x010101) thực chất là ba trường (01, 01, 01). Nó không mong đợi một cái gì đó trong một lĩnh vực bị ảnh hưởng bởi một lĩnh vực khác. Nhưng sử dụng một giá trị lớn hơn 255, cho phép một trường thấp ảnh hưởng đến một trường cao, và một giá trị giữa các số nguyên cho phép một trường cao ảnh hưởng đến một trường thấp hơn. Hãy thử 1,5 * 0x010101 để xem ý tôi là gì. – Ponkadoodle