Làm thế nào tôi có thể biết được bao nhiêu thẻ cào của Wikipedia đã được tiết lộ?


7

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 ??

nhập mô tả hình ảnh ở đây


Phụ thuộc vào những gì bạn xác định có thể nhìn thấy như. Về mặt kỹ thuật có thể nhìn thấy đầy đủ có nghĩa là không có một pixel không chuyển đổi nào chồng chéo từ thẻ cào vào đối tượng, nhưng điều đó thật là ngớ ngẩn. Tôi đoán bạn muốn nó được định nghĩa là có thể nhìn thấy khi có rất ít pixel ở phía trước đối tượng, phải không?
Superdoggy

Câu trả lời:


4

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

cảm ơn vì đã trả lời rộng rãi, tôi sử dụng cách tiếp cận tương tự như bạn, tôi đã thiết lập 6 máy va chạm ở cả hai bên và giữa của img, khi đó, hãy để lộ máy va chạm cũng được kích hoạt, ASA tất cả máy va chạm đều được kích hoạt, Phần thưởng được gán.
idurvesh

2

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!


cảm ơn vì liên kết này, nó rất hữu ích ... Tôi chắc chắn sẽ thử nó nhưng hiện tại cần phải hoàn thành nó một cách nhanh chóng, vì vậy hãy tiếp cận với máy va chạm tức là, thiết lập 6 máy va chạm ở cả hai bên và giữa img và khi img tiết lộ trình tạo ảnh được kích hoạt cũng vậy, ASA tất cả các máy va chạm đều được kích hoạt, Phần thưởng được chỉ định.
idurvesh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.