Tôi đã phát triển hiệu ứng thẻ cào. Tôi hiện đang làm việc trên hệ thống phần thưởng, vì vậy câu hỏi của tôi là tôi sẽ tiếp tục và triển khai logic như thế nào để cho tôi biết rằng đối tượng đằng sau thẻ cào hiện có thể nhìn thấy ??
Tôi đã phát triển hiệu ứng thẻ cào. Tôi hiện đang làm việc trên hệ thống phần thưởng, vì vậy câu hỏi của tôi là tôi sẽ tiếp tục và triển khai logic như thế nào để cho tôi biết rằng đối tượng đằng sau thẻ cào hiện có thể nhìn thấy ??
Câu trả lời:
Tôi đồng ý với câu trả lời của Superdoggy, nhưng tôi tin rằng có một cách tốt hơn để làm điều này. Nếu bạn biết khu vực của hộp va chạm thẻ cào bạn muốn tiết lộ, bạn có thể tìm hiểu về nó bằng cách: Lấy tổng số pixel của đối tượng (chiều rộng * chiều cao). Khi nhấn chuột: kiểm tra các pixel xung quanh chuột trong bán kính bạn chọn và nếu nó nằm trong khu vực của đối tượng và pixel hiện mờ đục, hãy đặt thành trong suốt và bộ đếm 'pixel hiển thị'. Để kiểm tra số lượng thẻ cào hiện có thể nhìn thấy, chỉ cần chia 'Hiển thị pixel' cho 'Tổng số pixel'.
Thật không may, tôi không biết cách lập trình trong Unity, vì vậy đây là một số mã giả!
Initializer:
set object = {x1, y1, x2, y2}
set revelead_pixels = 0
set radius = (number greater than 0)
set bool object_pixels[object.x2 - object.x1][object.y2 - object.y1] = 1
set percent_visible = (percentage of object to be visible before coninuing, 0 to 1)
On mouse press:
--mouse.x and mouse.y are coordinates of mouse
FOR x, radius * 2 DO
FOR y, radius * 2 DO
--only run if x and y are within circle around mouse
IF ((x - radius) * (y - radius) > radius) THEN
continue
ENDIF
--if mouse + 'for variables' is within object
IF ((x + mouse.x >= object.x1) AND (x + mouse.x < object.x2) AND (y + mouse.y >= object.y1) AND (y + mouse.y < object.y2)) THEN
--if the current pixel is set to 1 (or opaque)
IF (object_pixels[x + mouse.x - object.x1][y + mouse.y - object.y1] == 1) THEN
object_pixels[x + mouse.x][y + mouse.y] = 0
revealed_pixels += 1
ENDIF
ENDIF
ENDFOR
ENDFOR
IF revealed_pixels >= ((object.x2 - object.x1) * (object.y2 - object.y1)) / percent_visible THEN
--This statement runs if over preferred amount of pixels are visible
END
Tôi sẽ thêm tất cả các giá trị alpha của các pixel thẻ cào chồng lên các pixel đối tượng. Sau đó, nếu "A" <một số giá trị, bạn có thể giả sử rằng người dùng đã xóa đủ pixel để họ có thể nhìn thấy đối tượng.
Bạn có thể tìm thấy một hướng dẫn thực sự tốt về phát hiện va chạm trên mỗi pixel trong C # tại đây: Linkylink . Nó được tạo ra cho C # với XNA, nhưng khái niệm này không quá khó để thích nghi với C # với Unity, tôi cho rằng. Đơn giản chỉ cần sửa đổi mã một chút để đếm các giá trị alpha của các pixel va chạm thay vì chỉ kiểm tra xung đột.
Hi vọng điêu nay co ich!