Xoay đối tượng để đối mặt với người chơi


8

Đây có lẽ là một câu hỏi vectơ đơn giản, nhưng tôi không biết làm thế nào để làm điều đó.

Tôi có một đối tượng ở vị trí vector (ox,oy). Có khả năng mỗi bản cập nhật, người dùng sẽ đi xung quanh màn hình và sẽ ở vị trí (px,py)tại bất kỳ thời điểm nào. Làm thế nào để tôi làm cho nó để đối tượng luôn luôn đối mặt với người chơi? Tôi cần phải có được góc theo độ.

Đây là những gì tôi đã làm rối tung lên, nhưng hướng không ngay lập tức chỉ đến nơi người dùng được đặt. Thay vào đó, nó tăng dần theo hướng người dùng đang đi.

 objVec.Normalize(); 
 playerVec.Normalize();

 obj.Rotation = MathHelper.ToDegrees((float)Math.Acos(Vector2.Dot(objVec, playerVec)));

Tôi có thể đang đi về nó hoàn toàn sai, vì vậy bất kỳ trợ giúp được đánh giá cao!


Câu trả lời:


13

Hãy suy nghĩ về vấn đề khác nhau. Bạn muốn luôn phản đối để "đối mặt" với người chơi, điều đó có nghĩa là bạn muốn vectơ "chuyển tiếp" của nó xoay quanh để song song với vectơ từ chính nó đến người chơi. Giả sử vectơ "chuyển tiếp" của nó là bình thường obj.Rotation = 0, xoay cơ bản là cơ bản của arctangent Vector2.Subtract(playerPos, objectPos). Hầu hết các thư viện toán học sẽ có một cái gì đó giống như atan2có hai đối số hoặc một đối số Vector2sẽ tự động tìm ra góc phần tư phù hợp với bạn.

EDIT: Tôi nhận ra rằng bạn đang ở C # và đây thực sự là các lớp tích hợp. Vì vậy, bạn không cần phải đi săn tài liệu thư viện toán học, tôi có thể làm điều đó cho bạn. Mã đúng phải là:

Vector2 facingVec = playerVec - objVec;
obj.Rotation = MathHelper.ToDegrees((float)Math.Atan2(facingVec.Y, facingVec.X));

Lưu ý đảo ngược X / Y; đối với nho khô cuồng loạn, Atan2 luôn có các đối số đảo ngược.


Cảm ơn, điều đó làm việc. Tôi nghĩ rằng tôi đã thử điều đó trước đây, nhưng một khi tôi loại bỏ Chuẩn hóa, nó đã hoạt động.
XSL

1
Thật hấp dẫn để bình thường hóa mọi vectơ bạn gặp, nhưng không phải lúc nào cũng là một ý tưởng hay. Bạn muốn đảm bảo giữ rõ sự khác biệt giữa vị trí và hướng; hướng có thể được bình thường hóa một cách an toàn, nhưng vị trí không bao giờ nên được. Trong trường hợp này, objVec và playerVec rõ ràng là vị trí của các thực thể tương ứng và không bao giờ được chuẩn hóa.
Paul Z

9
Những người nho khô cuồng loạn mà bạn nói đến là ai? Chúng có ngon không
Olhovsky
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.