2009-02-26 33 views
5

Tôi có xe hơi và khi tăng tốc, tôi muốn tốc độ chậm "chậm" ..XNA MathHelper.SmoothStep? Làm thế nào nó hoạt động?

Sau khi xem xét một vài trang web, tôi đã kết luận rằng phương pháp SmoothStep có thể được sử dụng để làm điều đó?

Tôi khá biết cách di chuyển kết cấu và nội dung, vì vậy một ví dụ trong đó sử dụng mượt mà để tăng giá trị trong phao hoặc một thứ như thế, sẽ cực kỳ hữu ích!

Cảm ơn trước :)

Tôi nghĩ rằng không có ví dụ nào cho tất cả các phương thức trong thư viện MSDN.

Trả lời

12

SmoothStep sẽ không giúp bạn ở đây. SmoothStep là một hàm nội suy hai giá trị. Nó làm một cái gì đó tương tự như một nội suy xoang. Nó sẽ tăng tốc chậm có tốc độ sắc nét vào khoảng x = 0.5 và sau đó làm chậm đến (x = 1.0).

Giống như sau:

smoothstep_approx

này chỉ là tương đối, hàm thực không có những con số chính xác.

Có bạn có thể sử dụng x = 0..0.5 để đạt được hiệu quả bạn muốn, nhưng với rất ít quyền kiểm soát đường cong tăng tốc.

Nếu bạn muốn thực sự tăng tốc một chiếc xe hoặc bất kỳ đối tượng nào khác, đặt cược tốt nhất của bạn là theo dõi tăng tốc và vận tốc của chính bạn.

class Car : GameComponent 
{ 
    public override void Update(GameTime time) 
    { 
     velocity += acceleration * time.ElapsedGameTime.TotalSeconds; 
     position += velocity * time.ElapsedGameTime.TotalSeconds; 
    } 

    Vector3 position; 
    Vector3 velocity; 
    Vector3 acceleration; 
} 

vị trí, vận tốc và gia tốc là Vector2 hoặc Vector3 tùy thuộc vào số trạng thái trò chơi của bạn đang sử dụng. Ngoài ra, xin lưu ý rằng hình thức tích hợp này dễ bị lỗi toán học nhẹ.

5

Từ this documentation nó trông giống như SmoothStep mất 3 đối số - hai giá trị mà bạn muốn di chuyển giữa và số lượng giữa chúng mà có lẽ cần phải được giữa 0 và 1.
Vì vậy, nói rằng bạn có một f float mà increments tuyến tính từ 0 đến tốc độ đích trong một khoảng thời gian. thay vì sử dụng f trực tiếp như tốc độ, sử dụng SmoothStep sẽ trông như thế này:

float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed); 

Nó thực sự là tuyệt vời như thế nào xấu tài liệu này là.

0

Trang web rất hữu ích mà tôi tìm thấy trong thời gian chờ đợi. http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html

+0

Khi bạn cần phải nội suy số kín đáo thành số thực và bạn cần độ dốc điểm chính là bằng không. cho phép bạn nói rằng bạn muốn xe của bạn bắt đầu từ từ tại một thời điểm chính xác và sau đó từ từ dừng lại đến một thời điểm rất chính xác, sau đó SmootStep sẽ giúp bạn cho điều đó. – Coincoin

+0

Nó cũng có thể rất hữu ích cho tất cả các loại chuyển tiếp hoạt ảnh, chẳng hạn như menu. – Coincoin

+0

nếu bạn có ví dụ, vui lòng đăng :) – Moulde

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