2014-05-06 25 views
24

Bài đăng này liên quan đến bài đăng trước đó muốn tìm hiểu cách hiển thị đúng cách giữa LIBGDX và Box2D. Tôi phải hiểu rõ viewport trước khi tôi có thể tiếp tục.
Sau nhiều bài đọc mã/bài viết, tôi cảm thấy ý nghĩa của "viewport" là "hình chữ nhật mở của ống kính của camera quan sát thế giới trò chơi của LIBGDX, nơi tôi có thể di chuyển về thế giới để xem những gì tôi muốn". Nhưng, sau khi đọc nhiều hơn, tôi dường như không ở đâu gần ý nghĩa thực sự.
Tôi đã đọc wiki LIBGDX và đọc trong tài liệu OpenGL, có vẻ như giải thích chế độ xem là hai thứ khác nhau.LIBGDX: "Chế độ xem" là gì?

LIBGDX Wiki:

"Các khung nhìn là một khu vực quan sát hình chữ nhật của màn hình, nơi các cảnh 3D dự kiến ​​là gì khác hơn là lập bản đồ các đối tượng 3 chiều với mặt phẳng 2 chiều.."

OpenGL: "viewport cho thấy hình dạng của khu vực màn hình có sẵn vào đó cảnh được ánh xạ"

Stackoverflow:

"... Nó có một vài định nghĩa trong ngữ cảnh khác nhau ...": '(

Tôi đã thử đọc hàng chục bài viết diễn đàn và hướng dẫn. Nhưng, thật không may, hầu như tất cả mọi người nhảy ngay vào nó như thể "viewport" là một khái niệm nguyên thủy mà mọi người đều hiểu và biết.
Tôi biết mình sẽ nhận được rất nhiều nhiệt cho câu hỏi hoàn toàn cơ bản này. bởi vì tôi thực sự không biết d thực sự cần sự giúp đỡ.

Dù sao, vào câu hỏi thực tế.

"Chế độ xem" trong ngữ cảnh LIBGDX là gì?

+4

Tuyệt vời q. Đây là loại điều được thực hiện như được cấp nhưng khi bạn rà soát thông qua các ví dụ bạn nhận ra mọi người đang hack xung quanh việc lạm dụng các thành phần vì các sai sót cơ bản trong sự hiểu biết của họ về các thành phần cơ bản. – RichieHH

Trả lời

25

Điều đó tùy thuộc vào phiên bản LibGDX bạn đang sử dụng. Với LibGDX 1.0.0, lớp Viewport đã được giới thiệu và có lẽ đó là những gì các hướng dẫn và bài viết mới nhất có nghĩa là, khi họ nói về "viewports".

Lớp này quản lý hai điều:

  • Các quan sát của camera
  • Các OpenGL viewport

Các quan sát của camera xác định có bao nhiêu bạn muốn xem của thế giới trò chơi của bạn. Nếu bạn có số lượng lớn TiledMap kích thước 10000px X 10000px, thì có thể bạn chỉ muốn hiển thị một khu vực nhỏ của bản đồ đó cùng một lúc. Nếu bạn xác định chế độ xem máy ảnh của mình là 800px X 480px, thì bạn sẽ thấy một phần bản đồ của bạn có kích thước chính xác này (ít nhất là trong trường hợp OrthographicCamera). Nó giống như một cửa sổ mà bạn nhìn qua thế giới của bạn và bạn xác định kích thước của nó thông qua khung nhìn.

Chế độ xem OpenGL xác định khu vực mà chế độ xem của máy ảnh sẽ được ánh xạ tới. Theo mặc định, chế độ xem là 100% kích thước cửa sổ của bạn trên các hệ điều hành máy tính để bàn. Nhưng điều đó cũng có thể khác. A FitViewport với LibGDX 1.0.0 có thể mở rộng khung nhìn đó để nó giữ tỷ lệ khung hình của "khung nhìn ảo" mà bạn xác định (đó thực sự là chế độ xem của máy ảnh, được quản lý bởi lớp Viewport). Điều đó có nghĩa là trong trường hợp tỷ lệ khung hình của cửa sổ không khớp với tỷ lệ co của Viewport (ảo), chế độ xem OpenGL sẽ được đặt thành kích thước nhỏ hơn và thanh màu đen sẽ xuất hiện. Vì vậy, bạn có thể nghĩ về nó giống như một lớp khác giữa cửa sổ thực tế trên màn hình và máy ảnh của bạn. Lớp này lấy đầu ra của máy ảnh và tỷ lệ của bạn đến kích thước được xác định trong cửa sổ máy tính để bàn của bạn.

+0

Cảm ơn bạn vì lời giải thích tuyệt vời đó. Ý nghĩa/cách sử dụng/định nghĩa của chế độ xem trong Libgdx có thay đổi trước phiên bản 1.0.0 không? – coffeenet

+0

Trước phiên bản 1.0.0, nó chỉ là chế độ xem của máy ảnh và khung nhìn OpenGL, vì lớp 'Viewport' quản lý cả hai không tồn tại. – noone

+0

Vì vậy, trong phiên bản mới nhất của LIBGDX, camera.viewportWidth/Height & stage.setViewport() theo cùng một khái niệm như bạn đã giải thích, đúng không? Và, là thiết lập camera.viewportWidth/Height là giống như thiết lập stage.setViewport()? – coffeenet

Các vấn đề liên quan