Ví dụ như một trò chơi sidescrolling cơ bản. Khi người chơi di chuyển sang một bên, máy ảnh sẽ đi theo họ. Điều này có nghĩa là nơi các đối tượng trên thế giới không nhất thiết phải tương ứng với vị trí của chúng trên màn hình, vì màn hình và thế giới di chuyển tương đối với nhau.
Dưới đây là ví dụ: giả sử màn hình của bạn là 100px * 100px vuông (vì một số lý do). Bạn đặt một đối tượng tại vị trí (50, 0), do đó, nó bây giờ ở giữa và ở dưới cùng của màn hình. Bây giờ hãy nói rằng bạn di chuyển trình phát của bạn sang bên phải và toàn bộ màn hình sẽ quét theo trình phát. Điều này có nghĩa là đối tượng bạn đã đặt trước đó đã chuyển sang trái trên màn hình. Vì vậy, nó vẫn ở (50, 0) trên thế giới, vì nó không thực sự di chuyển tương đối so với phần còn lại của khung cảnh, nhưng nó bây giờ sẽ được rút ra tại, nói, (10, 0) trên màn hình, từ đó một phần của thế giới mà màn hình đang xem đã thay đổi. Đây là sự khác biệt giữa "worldspace" (nơi một đối tượng trên thế giới) và "không gian màn hình" (nơi đối tượng được vẽ trên màn hình thực tế).
Khi bạn cố gắng vẽ bằng SpriteBatch
, theo mặc định sẽ giả định tọa độ không gian thế giới giống như tọa độ không gian màn hình: khi bạn nói "vẽ tại (50, 0)", nó sẽ vẽ đối tượng tại (50, 0) trên màn hình. Ngay cả khi máy ảnh di chuyển, nó luôn luôn sẽ vẽ ở (50, 0) trên màn hình, vì vậy khi máy ảnh chảo, đối tượng sẽ làm theo và ở lại bị mắc kẹt vào cùng một vị trí trên màn hình.
Vì bạn thường không muốn điều đó, bạn cung cấp cho SpriteBatch
ma trận chiếu , là ma trận chuyển đổi cho biết cách chuyển đổi tọa độ không gian màn hình thành tọa độ không gian thế giới và ngược lại. Bằng cách này, khi bạn nói lô "vẽ tại (50, 0)", nó có thể nhìn vào ma trận nó nhận được từ máy ảnh và thấy rằng, vì máy ảnh đã di chuyển, (50, 0) trên thế giới thực sự có nghĩa là (10, 0) trên màn hình, và nó sẽ vẽ sprite của bạn ở đúng nơi.
Giải thích tuyệt vời. –