Khi nào tôi nên sử dụng một động cơ vật lý? [đóng cửa]


12

Vì tôi đã tìm ra Box2D , tôi đang sử dụng nó cho bất kỳ ứng dụng nào giống như trò chơi mà tôi cố gắng viết, từ các nguyên mẫu rất nhỏ hoặc các chương trình nhỏ để thử nghiệm một cái gì đó, cho các dự án thực tế.

Nhờ có nó, thật dễ dàng để xử lý mọi thứ từ va chạm, đến vật lý thực tế.

Tuy nhiên, đôi khi, tôi có một số nghi ngờ về điều đó: nếu tôi chỉ phải xử lý các vòng tròn hoặc AABB, và không cần các công cụ vật lý tiên tiến (khớp hoặc những thứ tương tự), tôi nghĩ rằng một động cơ vật lý có thể thêm một loại lớn, không cần thiết trên đầu.

Để xác nhận lại câu hỏi của tôi: bạn sẽ sử dụng Box2D (hoặc các công cụ vật lý khác) trong một trò chơi trong đó vật lý thực sự đơn giản (như Super Mario, giả sử)? Và, nếu không, tại sao?


2
Làm những gì cảm thấy đúng. Bạn có nghĩ rằng trò chơi của bạn cần một công cụ vật lý? Bạn có nghĩ Mario sẽ được hưởng lợi từ Box2D không? Mario mới nhất chắc chắn có một cảm giác tốt với nó với vật lý tốt, nhưng nó không cảm thấy bất cứ thứ gì giống như bất cứ thứ gì tôi thấy được xây dựng trong Box2D.
Jeff

@Jeff: Điều đó phụ thuộc vào câu hỏi "Khi nào tôi nên sử dụng Box2D?" hoặc "Khi nào tôi nên sử dụng động cơ vật lý?". Mario mới chắc chắn chứa một động cơ vật lý.

1
@Joe Wreschnig: Vâng, nhưng có bao giờ một trường hợp động cơ vật lý không được sử dụng? Chỉ có thời gian tôi có thể nghĩ sẽ là một cuộc phiêu lưu văn bản, hoặc chỉ và nhấp chuột. Tôi đoán nó phụ thuộc vào mức độ chung mà bạn muốn đưa ra định nghĩa về động cơ vật lý
Jeff

@Jeff: Rất ít trò chơi giải đố (phi vật lý) cần một, ví dụ Tetris, Bejeweled. Trong các trò chơi hành động, tôi có thể lập luận rằng hầu hết các shmup 2D không được hưởng lợi từ động cơ vật lý, vì chúng thường chỉ cần kiểm tra chồng chéo AABB / vòng tròn, không có phản ứng va chạm, đường di chuyển hoàn toàn cố định và vận tốc không đổi. Platformer, mặc dù, tất cả là về vật lý.

Câu trả lời:


8

Nếu bộ nhớ, dung lượng ổ đĩa, nỗ lực phát triển hoặc thời gian xử lý được sử dụng cho Box2D quá nhiều cho mục đích của bạn, thì đừng sử dụng nó. Mặt khác, không có lý do để tránh nó nếu bạn thấy nó hữu ích.


2
Đây là tất cả những gì nó thực sự đi xuống. Nếu nó làm cho cuộc sống của bạn dễ dàng hơn và không chặn bạn khỏi các nền tảng bạn muốn, thì đó là một chiến thắng, ngay cả khi bạn không sử dụng các phần của nó.

1
Hay nói cách khác - "Lý do duy nhất để phát minh lại bánh xe là học về cách phát minh lại bánh xe."
Exilyth

4

Một thứ dễ như Super Mario không, vì nó không thực sự có nhiều vật lý. (Mario không ảnh hưởng đến vật lý của đối tượng khác bằng cú nhảy của anh ta)

nếu bạn đang sử dụng vật lý theo nghĩa nhiều vật phẩm (nhiều hơn một) sử dụng vật lý để ảnh hưởng đến kết quả của các vật thể khác, thì tôi sẽ sử dụng một động cơ.


Mặt khác, Mario có động lượng, gia tốc, kích thước thay đổi và va chạm định hướng, tất cả những gì bạn nhận được "miễn phí" với một động cơ vật lý, và không chỉ là các kiểm tra chồng chéo đơn giản.

Tôi đồng ý - Tôi nghĩ rằng hầu hết thời gian một động cơ vật lý sẽ cung cấp cho bạn rất nhiều thứ sẽ lãng phí thời gian để tự thực hiện.
Christopher Horenstein

3
Đúng là luôn luôn tốt hơn không phát minh ra bánh xe, tôi chỉ thấy rằng nếu tôi chỉ muốn một bánh xe, tôi sẽ không lấy một bản thiết kế cho một chiếc xe hơi. Trên hết, bạn sẽ biết nhiều hơn về toàn bộ trò chơi của mình và dễ dàng thay đổi / thay đổi vật lý hơn.
Spooks

1
Đó là một sự tương tự thực sự khủng khiếp. Điều này giống như, bạn muốn có một bánh xe và trục và có thể là một cột lái và động cơ nhưng có lẽ không phải là bảng điều khiển hoặc cửa sổ điện.

3
Ai sẽ không muốn cửa sổ điện?
Spooks

2

Câu trả lời của tôi là có, hoàn toàn sử dụng một công cụ vật lý như Box2D cho những thứ đơn giản, bởi vì bạn không nên dành thời gian phát triển không cần thiết để thực hiện một số tính năng mà bạn nhanh chóng nhận được từ một công cụ vật lý. Chẳng hạn, xác định một cơ thể tĩnh và thả một cơ thể động vào nó và tác dụng lực lên cơ thể động của bạn để nhập liệu định hướng và bạn đã có một nền tảng trong vài phút. Tôi không nghĩ rằng một động cơ thêm đủ chi phí để làm cho nó không có giá trị.


3
tuy nhiên, người ta có thể nói rằng việc tìm ra cách triển khai và sử dụng Box2D sẽ mất nhiều thời gian hơn để tạo ra vật lý đơn giản. (mặc dù tôi đoán điều này phụ thuộc vào mức độ sử dụng vật lý)
Spooks

1
@Spooks: Tôi không thể tưởng tượng bất cứ điều gì "dễ dàng" hơn Box2D vẫn hữu ích.

Tôi hoàn toàn đồng ý với Joe ở đây; không có sự thay thế đơn giản nào cho tính hữu dụng đi kèm với việc sử dụng Box2D. Tôi không thể tưởng tượng việc mã hóa thứ gì đó sẽ đáp ứng nhu cầu của một người nhanh hơn là học cách tạo ra một số đồ đạc và xác định lực hấp dẫn với Box2D.
Christopher Horenstein

1

Nếu "vật lý" trong trò chơi đơn giản thì không cần nhập động cơ vật lý.

Tôi sử dụng thuật ngữ vật lý một cách lỏng lẻo vì có sự khác biệt giữa mô hình hóa vật lý và mô phỏng phyiscs. Một điều rất quan trọng để phân biệt.

Ví dụ, trong Mario Bros. khi bạn chạy và dừng, bạn sẽ trượt một chút. Hãy suy nghĩ về cách bạn có thể thực hiện điều đó.

Bạn có thể mô hình hóa nó bằng cách xác định tất cả các biến cần thiết: vd. khối lượng, trọng lực, hệ số ma sát, lực đẩy, v.v ... và sau đó tính toán vận tốc mới, gia tốc, v.v.

Nhưng nó có đáng không? Bạn có thể mô phỏng hiệu ứng tương tự bằng cách giảm tốc độ của người chơi trong khi họ không di chuyển ...

Cái gì đó như:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

Sự khác biệt là một là vật lý, cái khác thì không. Cả hai đều có ưu điểm và nhược điểm riêng. Nhưng như một quy tắc chung cho các trò chơi đơn giản, việc giả mạo nó sẽ dễ dàng hơn nhiều.


1
Đó là loại vật lý là thô. Nếu bạn định làm giả nó, cũng có thể làm cho nó trông đẹp. ma sát = .9 hoặc một số số dưới 1. speedX * = ma sát; speedY * = ma sát;
Tấn

2
Tất nhiên, vào cuối dự án, nó biến thành "nếu (nhấn phím di chuyển và không di chuyển và trên băng và không ở dưới nước và bạn có sức mạnh đặc biệt này và bạn không đi xe khởi động và ...)".

@AttackingHobo: Điểm của bài viết không phải là về việc tạo ra một thuật toán trượt tốt đẹp .. Đó là để minh họa sự khác biệt giữa mô phỏng và mô hình.
aaronfarr

@Joe: Đó chỉ là những sửa đổi cho biến ma sát của bạn .. có lẽ bạn và @AttackingHobo nên trò chuyện: P Với một công cụ vật lý, bạn phải xác định các thuộc tính cho mọi đối tượng trong trò chơi. Quan điểm của tôi là việc cắm một công cụ vật lý cho các trò chơi đơn giản không nên tự động. Tình huống của nó.
aaronfarr

1
@aaronfarr: Không có sự khác biệt giữa mô phỏng và mô hình; cho những mục đích này chúng là từ đồng nghĩa. Tất cả những gì bạn đã thể hiện là một phần biệt lập của mô hình / mô phỏng đồ chơi có ít mã hơn toàn bộ Box2D.

0

Bạn phải quyết định theo tình hình

Ưu điểm khi sử dụng công cụ tùy chỉnh của bạn

  • Phần mềm được kiểm soát (không thay đổi do phát hành mới)
  • Thích hợp cho trò chơi của bạn (chỉ các tính năng mà bạn cần cho trò chơi của mình, theo cách bạn cần chúng)
  • Tính linh hoạt (bất kỳ động lực điên rồ nào bạn muốn có thể được mã hóa, mọi tính năng trong tương lai sẽ không phụ thuộc vào động cơ)
  • Kinh nghiệm học tập (có thể một ngày nào đó bạn cần cải thiện một công cụ và bạn cần cách xây dựng một công cụ)
  • Ít nghiên cứu và lập trình cho các tính năng đơn giản (đôi khi để làm một cái gì đó với động cơ có thể cần phải hiểu sâu về cấu trúc của nó .. và có thể không xứng đáng)
  • Hiệu suất cao hơn cho các tính năng đơn giản (đối với các tính năng cụ thể đơn giản, bạn có thể có hiệu suất cao hơn so với động cơ có mục đích khá chung)
  • Ít bộ nhớ hơn (đối tượng và mã có thể chiếm ít không gian và bộ nhớ hơn khi chỉ sử dụng các tính năng cần thiết)

Ưu điểm của động cơ vật lý ngoài luồng:

  • Có thể thích ứng với phần cứng mới và hệ điều hành mới mà không cần nỗ lực nhiều
  • Ít nỗ lực học tập và lập trình cho các tính năng phức tạp
  • Hiệu suất cao hơn cho các tính năng phức tạp
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.