Giải thuật để bắn một viên đạn như game gunny

Thấy có bạn làm cái game guny mình cũng muốn làm cái dụ bắn một viên đạn theo hình cầu vồng như trong game ấy, như không biết giải thuật thế nào, có anh chị em nào biết hướng dẫn với?

1 Like

Giải thuật gì, kiến thức vật lí lớp 10 thôi

3 Likes

Quỹ đạo của nó có phải parabol không bạn?

1 Like


Khác cái là ko có sức gió

3 Likes

giải thuật thì có rồi mà làm sao triển khai nhỉ, có viên đạn không mà phức tạp thế?

//V0 là vận tốc ban đầu, t là thời điểm bất kỳ
function lay_toa_do_vien_dan(V0,t){
}

1 Like

Giải 2 phương trình theo t là tìm được tọa độ đạn còn gì ??

Tại thời điểm bắn xác định được vận tốc sơ cấp + góc bắn =>

Phương trình vận tốc:
vy = vosin(A) - gt;
vx = vocos(A) + awt.

Phương trình tọa độ:
x=vosin(A)t - gt^2 / 2
y = vo
cos(A)t + awt^2/2.

vo: vận tốc sơ cấp tại thời điểm bắn.
A: góc bắn
g: gia tốc rơi tự do
aw: gia tốc cản của gió.
vx: vận tốc hướng x theo t.

3 Likes

vy = vosin(A) - gt;
vx = vocos(A) + awt.

Vận tốc theo chiều y giảm dần theo chiều y —> Okay
Còn vận tốc theo chiều x lại tăng dần theo thời gian à?

uh còn cái thét mét nữa là nếu không có gió thì viên đạn bay theo chiều x mãi mãi ?

1 Like

Lại còn một thắc mắc nữa là tại sao trong các công thức trên lại không đề cập đến khối lượng nhỉ, mình thấy vật càng nặng nó rơi càng nhanh?

1 Like

Vận tốc càng nhanh sức cản không khí càng lớn (tăng theo bình phương vận tốc) :slight_smile: nên có giới hạn thôi. Giờ nên tập trung vào mô hình cơ bản trước.

2 Likes

Thế mấy cái game engine của các bạn xài nó không làm sẳn cái này à?

1 Like

wat, sao không dùng libraries có sẵn, 2D thì có Box2D, 3D thì có Bullet, ODE, Havok đó. Vì nếu sau này bạn có mở rộng ra việc phá hủy địa hình, xử lý movement, collision, bouncing, particle effects thì nhiều khi physics engine nó sẽ bao luôn vụ đó.

Nếu muốn viết từ đầu chỉ để học hỏi thì mình không có ý kiến, nhưng nếu mục đích của bạn không nằm trong việc học thì việc viết từ đầu rất counter-productive.

2 Likes

Hay cho câu " mình thấy vật càng nặng nó rơi càng nhanh" @_@!

4 Likes

Sức cản không khí :v (drag).

2 Likes

uh, mình cũng nhớ: Nếu không có sức cản của không khí thì viên chì và lông ngỗng rơi với tốc độ như nhau; Thí nghiệm này đã được thực hiện tại Tháp gì đó ở Anh…

1 Like

Trong thực tế viên đạn bay chịu tác động cản của không khí. Gia tốc cản thay đổi theo vận tốc đạn. Nhưng bỏ qua cái này vì ta chỉ viết tương đối chứ không phải đang mô phỏng thí nghiệm vật lý.

Ta chỉ xét đến gió. aw là gia tốc của đạn theo phương Ox mà lực gió tác động lên đạn. Coi như là không đổi đi. Thực tế nó thay đổi theo vận tốc đạn nhưng không xét khó thế làm gì.

Gió ngược Ox thì aw mang dấu âm và ngược lại.

Khi đạn gặp mục tiêu hoặc rơi chạm đất thì kết thúc quá trình bay nên không có chuyện nó bay mãi theo hướng x hay y.

3 Likes

Gió ngược Ox thì aw mang dấu âm và ngược lại.

Mình nghĩ lực ma sát của không khí thì lúc nào cũng tồn tại nếu không Vx sẽ không đổi theo thời gian, gọi là akk

1 Like

Khi bạn càng muốn giống thực tế thì phương trình của bạn càng phức tạp.
Ví dụ :
Nhiệt độ cao thì không khí loãng -> lực cản/ ma sát giảm <> Nhiệt độ thấp thì không khí “đặc” hơn -> lực / ma sát cản tăng.
Gió không thổi thẳng hướng đạn mà chéo sang 2 bên, lên trên hoặc xuống dưới.
Gió vận tốc không đều.

Đó là những cái tồn tại trong thực tế và trong game để xử lý nó rất khó nhưng nó lại không mang lại hiệu quả gì. Trong trường hợp này bạn cần bỏ qua hết chúng và chỉ cần xét tác động của gió-chính là yếu tố bạn muốn đưa vào game. Khi có gió là có lực -> gán cho aw một giá trị cố định tỷ lệ với vận tốc gió. Có gia tốc khác 0 thì vận tốc đạn sẽ luôn thay đổi.

2 Likes

Bỏ qua sức cản không khí.
Vật càng nặng thì lực hấp dẫn càng lớn :
F = G * m / (d * d).
Nhưng ngược lại,để gia tốc (đạt được 1 vận tốc nào đó) 1 vật có khối lượng lớn thì lại cần 1 lực lớn theo công thức :
F = maa;
Từ đó suy ra cùng với 1 khoảng cách , thì các vật có khối lượng lớn hay bé đều có cùng 1 gia tốc khi rơi xuống đất. (a = g ~ 10m/s).

3 Likes

Lấy vector gia tốc của gió, cộng với vector gia tốc trọng trường rồi cộng với vector gia tốc ném là ra thôi (chắc thế :sweat_smile:)

3 Likes

https://codepen.io/liabru/pen/yGbFt

Đúng là các thư viện có hổ trợ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?