Hôm nay xin mạn phép đóng góp 1 chiêu mới (không biết có mới hay không) Để làm mờ tất cả các object thì ta thường gặp khó khăn rất nhiều nhưng lại thường sử dụng nhất VD: khi gặp Boss, sang cảnh mới, hay tạo object.... trong đoạn mã này thì chỉ cần thay đổi tham số ratio (là tỉ lệ mờ đi sau mỗi bước), delay (là thời gian trễ để mắt người chơi nhận biết thay đổi) Còn dòng mã i += 16, j += 16 là kích thước vùng chữ nhật tối thiểu mà object đứng được (ở đây xin chọn 16) sample.zip var alpha, i, j, ratio, myID, delay; ratio = 0.01; delay = 20; alpha = 1; io_clear(); do { // giữ handle của các sự kiện io_handle(); // giảm alpha đi cho đối tượng mờ dần alpha -= ratio; for(i = 0; i < room_height; i += 16) { for(j = 0; j < room_width; j += 16) { // Neu co instance thi lam mo no // có thể làm mờ chỉ với một số loại Object thôi thì thay all bằng object ID myID = instance_position(j, i, all); if(myID) myID.image_alpha = alpha; } } // Vẽ lại màn hình screen_redraw(); // dừng lại 1 khoảng cho người chơi nhận biết sleep(delay); }until(alpha <= 0); // trả quyền điều khiển io_clear();
{@: script này chỉ có hiệu quả nếu room nhỏ, nếu room lớn quá hoặc với những room có grid nhỏ (cái mà bạn nói là "kích thước vùng chữ nhật tối thiểu mà object đứng được) thì vòng lặp sẽ rất lớn, edit: Mã: var alpha, i, j, ratio, myID, delay; ratio = 0.01; delay = 20; alpha = 1; io_clear(); do { io_handle(); alpha -= ratio; for(i=0;i<instance_number(all);i+=1) { var a; a=instance_find(all,i) a.image_alpha=alpha } screen_redraw(); sleep(delay); }until(alpha <= 0); io_clear(); :@}
Điều này thực hiện không lâu đâu, với những game grid thì kích thước khoảng 16x16, 32x32 hoàn toàn làm nhanh được vì 2 lý do: - Room hiển thị không hoàn toàn nếu grid quá lớn, đỡ mất công vẽ lại. - Không vẽ lại từng đối tượng trong mỗi bước lập mà vẽ lại toàn bộ sau khi đã chỉnh alpha cho tất cả xong, vì vậy nó sẽ nhanh lắm (có thử trên ô grid có 100 hàng 100 cột mất chưa đầy 1s) Code của bạn vô địch sửa dùng cho 1 hay nhiều loại object nếu muốn phải lặp nhiều lần. Xin thêm 1 cách nữa là dùng instance_count, và instance_id Mã: var alpha, i, j, ratio, myID, delay; ratio = 0.01; delay = 20; alpha = 1; io_clear(); do { io_handle(); alpha -= ratio; for(i=0;i<instance_count;i+=1) <===== { var a; a=instance_id[i]; <===== a.image_alpha=alpha } screen_redraw(); sleep(delay); }until(alpha <= 0); io_clear(); Vậy tùy mỗi hoàn cảnh, mỗi loại grid hay nhu cầu ẩn hiện các object khác nhau ta có thể dùng + Đối với grid vừa đủ lớn mà muốn ẩn một object cho nhanh ==> code Vô địch + Đối với grid lớn và ẩn tất cả ==> code mới