Làm cách nào tôi có thể chụp vị trí của đối tượng trò chơi vào lưới?


9

Tôi đang làm một trò chơi liên quan đến các yếu tố trò chơi "rơi xuống". Vấn đề là, tôi không chắc chắn làm thế nào để làm cho nó để các khối sẽ bám vào một loại lưới nào đó, nói cách khác, tôi không chắc nó sẽ chọn ô gần nhất đến vị trí của nó như thế nào.

Các khối không liên tục bám vào lưới (tức là chúng chịu trọng lực). Bất cứ lời khuyên?

Câu trả lời:


13

Bạn có thể làm một cái gì đó như thế này

int gridCubeWidth = 16, gridCubeHeight = 16;

cube.Position.X = Math.round(cube.Position.X / gridCubeWidth) * gridCubeWidth;
cube.Position.Y = Math.round(cube.Position.Y / gridCubeHeight) * gridCubeHeight;

Điều này về cơ bản làm tròn các vị trí X và Y đến bội số gần nhất của kích thước khối. Sau đó cân nó theo kích thước khối để có được vị trí đồng nhất.


2
Tôi nghĩ Math.round có ý nghĩa hơn. ví dụ: hãy tưởng tượng cubeWidth / height = 3. sau đó ax = 4 nên ánh xạ tới 3 nhưng x = 5 nên ánh xạ tới 6.
numan

0

Trong nghiên cứu nhanh của tôi, khi bạn chụp một số hình học lên lưới:

  • Miễn là tất cả các đỉnh của đa giác của bạn (ở vị trí cuối cùng) trùng với các đỉnh của lưới (nói cách khác, nếu những gì bạn đang cố gắng chụp vừa vặn trong lưới), thì

  • Bạn có thể chụp bất kỳ đỉnh nào của đa giác của bạn vào đỉnh lưới gần nhất của nó và áp dụng cùng một bản dịch cho tất cả các đỉnh khác. Bạn sẽ luôn luôn kết thúc với cùng một vị trí kết quả.

Điều này có nghĩa là bạn chỉ cần chọn một đỉnh và làm tròn tọa độ của nó, hoặc, nếu bạn đang sử dụng lưới có cạnh lớn hơn một đơn vị, hãy sử dụng biểu thức của Austin:

cube.Position.XorYorZ = Math.round(cube.Position.XorYorZ / gridCubeWidth) * gridCubeWidth;


-4

Math.ceil mang lại cảm giác phù hợp để chụp các khối vào lưới bên phải


5
Bạn có thể giải thích những gì bạn có nghĩa là "cảm giác đúng"? Và tại sao chức năng trần làm điều đó?
MichaelHouse
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.