Làm thế nào để đạn hoạt động trong các trò chơi video?


64

Tôi đã gặp câu hỏi này khi tôi đang thiết kế một trò chơi video trong C #.

Nếu chúng ta xem xét các trò chơi như Battlefield hay Call of Duty , hàng trăm hoặc thậm chí hàng ngàn viên đạn đang bay cùng một lúc. Các sự kiện được kích hoạt liên tục, và theo những gì tôi biết, điều này hút rất nhiều sức mạnh xử lý hay sao? Tôi muốn biết các nhà phát triển trò chơi khác nhau quản lý các viên đạn (2D và 3D) như thế nào và phương pháp hiệu quả nhất cho từng loại là gì.

Tôi đọc câu hỏi Làm thế nào các viên đạn được mô phỏng trong các trò chơi video? nhưng nó không chạm vào cách thức hoạt động của đạn từ quan điểm thiết kế chương trình.

Tôi đã có một vài ý tưởng, nhưng mỗi ý tưởng đều có nhược điểm:


Phương pháp hiệu quả nhất tôi có thể nghĩ ra (đối với các trò chơi 2D):

Giả sử tôi đã tạo một lớp có tên Bullet và trong bao lâu người dùng sẽ giữ một nút, cứ sau 0,01 giây sẽ tạo ra một đối tượng Bullet. Viên đạn này có:

  • 1 vận tốc

  • 2 Vị trí bắt đầu của nơi nó được bắn từ

  • 3 kết cấu Sprite

  • 4 Hiệu ứng tấn công

Vì viên đạn sẽ là lớp riêng của nó, nó có thể quản lý bản vẽ, di chuyển và người nghe hành động.

Bộ xử lý sẽ không khó để xử lý hàng ngàn đối tượng này được khởi tạo, sau đó bị hủy (khi hiệu ứng tấn công được kích hoạt)? Dung lượng RAM?


Phương pháp hiệu quả cho các trò chơi 3D - Một suy nghĩ khác mà tôi có là:

Hãy nói rằng tôi tạo ra một lớp vũ khí. Vũ khí này có nhiều tính năng khác nhau, một số trong đó:

  • 1 Phát hiện nơi vũ khí đang nhắm và xác định xem nó có đang nhìn vào mục tiêu không

  • 2 Kích hoạt hoạt hình bắn súng

  • 3 Có phương thức doDamage () chỉ ra thứ gì đó trừ đi sức khỏe từ bất cứ thứ gì súng chĩa vào

  • 4 Thông báo lớp hoạt hình đạn khi nhấn nút

Sau đó, tôi có thể tạo một lớp tĩnh, nói BulletAnimation, có thể nhận được thông báo từ nơi khẩu súng được kích hoạt, nơi khẩu súng được chĩa vào (đối với đích đạn), và thông tin về tốc độ và tốc độ phù hợp để sử dụng cho viên đạn . Lớp này sau đó vẽ các họa tiết (trên một luồng mới, có thể là idk) dựa trên cả hai vị trí và sprite mong muốn, để mô phỏng một viên đạn được bắn ra từ súng.


Cái sau có vẻ khó mã hóa hơn, và sẽ không mất nhiều sức mạnh xử lý để liên tục gọi tĩnh để làm điều này cho hàng ngàn viên đạn cùng một lúc? Nhận cập nhật liên tục trên cả hai vị trí bắt đầu và kết thúc cũng sẽ khó khăn.

Câu hỏi của tôi là, những người sáng tạo trò chơi hiệu quả nhất làm điều đó là gì? Phương pháp này có thay đổi từ trò chơi 2D sang 3D không?


16
Lưu ý rằng ngay cả ngày nay, hầu hết các trò chơi không mô phỏng chuyến bay của đạn. Đối với bất cứ điều gì được coi là "đủ nhanh", một lần quét đơn giản được thực hiện thay vào đó - về cơ bản, nó giả định rằng tác động xảy ra cùng lúc với khi bạn nhấn cò. Trong mọi trường hợp, "hàng trăm hoặc hàng ngàn viên đạn" không thực sự là một số tiền lớn - đó là thứ mà các trò chơi đã có từ rất sớm (nhiều trò chơi địa ngục đạn khác nhau), mạnh hơn hàng ngàn lần so với các máy ngày nay. Bạn chỉ cần đảm bảo chỉ thực hiện càng ít công việc trên mỗi viên đạn càng tốt :)
Luaan

42
Đạn thường hoạt động thông qua pew-pew-pewcông nghệ :)
MonkeyZeus

5
Không bao giờ có hàng trăm hoặc hàng ngàn viên đạn bay xung quanh cùng một lúc. Không có khẩu súng nào bắn chúng nhanh như vậy. Ngay cả Phalanx hùng mạnh cũng đạt tới 75 viên đạn mỗi giây. Dựa trên "Phạm vi bắn hiệu quả" được liệt kê trên Wikipedia, các viên đạn bay tối đa khoảng 3 giây, do đó, một chiếc Phalanx có thể đưa 225 viên đạn lên không trung cùng một lúc. Một M16 đứng đầu với tốc độ khoảng 12 vòng / giây và không thể duy trì tốc độ đó (tối đa cho lửa duy trì là 0,25round / giây). Không có nhiều súng nổ cùng một lúc!
Cort Ammon

3
Chỉ cần chỉ ra điều này, sẽ không bao giờ tốt khi tạo các đối tượng các lớp riêng lẻ khi chúng đơn giản như vậy. Sẽ tốt hơn nhiều nếu có một phiên bản đạn cho mỗi loại đạn. Chi phí nhỏ trong chiều dài mã và không có gì sẽ giúp bạn tiết kiệm thêm 4 byte cho mỗi dấu đầu dòng (nếu kiểu là số nguyên). Thêm vào đó, một đối tượng có thể dễ dàng quét một danh sách.
Vịt lớn

4
@Cort - đó là giả sử thực sự chỉ có một khẩu súng trong không gian trò chơi. OP đã đề cập đến các trò chơi như Battlefield và CoD, nơi hàng chục người chơi có thể bắn súng tự động cùng một lúc. Không phải là không có lý khi có một con số vô lý nếu mỗi vòng thực sự được tính toán trong không gian.
Jesse Williams

Câu trả lời:


78

Tôi chắc chắn có thể thấy lý do tại sao bạn nghĩ rằng thật khó để mô phỏng chúng, nhưng có đủ các ràng buộc về đạn (tất cả các viên đạn, thực sự) để làm cho chúng dễ dàng hơn.

  1. Chúng thường được mô phỏng như một điểm duy nhất, thay vì như một cái gì đó có âm lượng. Điều này làm cho việc phát hiện va chạm dễ dàng hơn đáng kể, vì bây giờ tôi chỉ cần thực hiện va chạm với các bề mặt rất đơn giản, chẳng hạn như một đường thẳng chống lại một vòng tròn.

  2. Chúng tôi biết họ sẽ di chuyển như thế nào, vì vậy không có nhiều thông tin chúng tôi cần lưu trữ hoặc tính toán cho họ. Danh sách của bạn khá chính xác, nói chung chúng tôi sẽ có thêm một vài điều liên quan đến nó, như ai đã bắn viên đạn, và loại của nó là gì.

  3. Vì tất cả các tên lửa sẽ rất giống nhau, chúng tôi có thể phân bổ trước chúng, để tránh tất cả chi phí tạo ra chúng một cách linh hoạt. Tôi có thể phân bổ một mảng 1000 tên lửa, và bây giờ chúng có thể được truy cập chỉ bằng một chỉ mục và tất cả chúng đều tuần tự trong bộ nhớ, vì vậy việc xử lý chúng sẽ nhanh chóng.

  4. Chúng có tuổi thọ / phạm vi cố định, vì vậy tôi có thể hết đạn cũ và tái chế bộ nhớ thành đạn mới rất nhanh.

  5. Một khi họ đánh thứ gì đó, tôi cũng có thể hết hạn, để họ có một cuộc đời hữu hạn.

  6. Vì chúng tôi biết khi nào chúng được tạo, nếu chúng tôi cần những cái mới và chúng tôi không có bất kỳ thứ gì miễn phí trong danh sách được phân bổ trước của chúng tôi, tôi chỉ có thể lấy những cái cũ nhất và tái chế chúng, và mọi người sẽ không chú ý nếu đạn hết hạn sớm .

  7. Chúng được kết xuất dưới dạng các họa tiết (thường) hoặc dưới dạng mô hình poly thấp và chiếm rất ít không gian trên màn hình, vì vậy chúng rất nhanh để kết xuất.

Nếu tính tất cả những điều đó, đạn có xu hướng tương đối rẻ. Nếu ngân sách của chúng tôi đã bị đạn tiêu tốn và kết xuất chúng, chúng tôi thường chỉ thiết kế lại nó để hạn chế số lần bắn bạn có thể bắn (bạn sẽ thấy điều này trong nhiều game arcade cũ), hãy sử dụng vũ khí chùm tia di chuyển ngay lập tức hoặc làm chậm tốc độ bắn xuống để đảm bảo chúng tôi ở trong ngân sách.


12
Tôi phải không đồng ý với 5), điều này thực sự chỉ làm cho toàn bộ sự việc trở nên phức tạp trong các trò chơi hiện đại. Trong các game bắn súng trước đây, điều này có thể chấp nhận được, ngày nay thậm chí COD cho phép người chơi bắn xuyên qua các bức tường gỗ. 6) sẽ không được chấp nhận đối với bất kỳ hệ thống cạnh tranh nào, mặc dù đó sẽ là một vấn đề hiếm gặp.
SBoss

17
@SBoss sau đó viết lại: "Một khi họ đánh thứ gì đó mà họ không thể xâm nhập, tôi cũng có thể hết hạn, để họ có một cuộc đời hữu hạn.". Và trong 6, bạn có thể gặp trường hợp xấu nhất bằng cách giới hạn tốc độ bắn tối đa cho mỗi ký tự và sau đó giữ một mảng dàinum_characters * max_bullets_per_character
ratchet freak

14
@SBoss Tôi nghĩ # 6 là nhiều hơn cho ví dụ. trò chơi không gian từ trên xuống, trong đó một viên đạn di chuyển chậm có thể di chuyển một khoảng cách lớn ra khỏi màn hình trước khi đánh thứ gì đó / biến mất. Rõ ràng đó không phải là vấn đề trong các trò chơi kiểu CoD, nơi đạn di chuyển nhanh và nhanh chóng chạm đến giới hạn của thế giới.
BlueRaja - Daniel Pflughoeft

1
Phần lớn các trò chơi KHÔNG mô hình đạn (đạn đạo bên ngoài) cả. Hầu hết các trò chơi sử dụng một kỹ thuật gọi là "quét-quét".
Aron

45

Có lẽ một trong những cách hiệu quả nhất để thực hiện đạn là sử dụng cái được gọi là hitcan . Việc thực hiện nó khá đơn giản - khi bạn khai hỏa, bạn kiểm tra xem khẩu súng đang nhắm vào cái gì (có thể sử dụng tia để tìm thực thể / vật / lưới gần nhất), sau đó bạn 'bắn' nó, gây sát thương. Nếu bạn muốn làm cho nó trông giống như một viên đạn vô hình thực sự, di chuyển nhanh được bắn ra, bạn có thể giả mạo nó bằng cách thêm một chút độ trễ phụ thuộc vào khoảng cách trước khi gây sát thương.

Cách tiếp cận này về cơ bản giả định đạn bắn có vận tốc vô hạn, và thường được sử dụng cho các loại vũ khí như laser và chùm hạt / pháo và có thể là một số dạng súng bắn tỉa .

Cách tiếp cận tiếp theo sẽ là mô hình viên đạn được bắn thành một viên đạn, được mô hình hóa như một thực thể / vật thể riêng của nó chịu va chạm, và có thể là lực hấp dẫn và / hoặc sức cản không khí làm thay đổi hướng và vận tốc của nó. Nó phức tạp hơn phương pháp hitcan do các phương trình vật lý bổ sung và sử dụng nhiều tài nguyên hơn do có một đối tượng viên đạn thực sự, nhưng có thể cung cấp các viên đạn thực tế hơn.

Đối với việc quản lý va chạm giữa đạn dựa trên đạn và các vật thể khác trong trò chơi, việc phát hiện va chạm có thể được đơn giản hóa rất nhiều bằng cách sắp xếp các đối tượng của bạn thành hình tứ giác hoặc quãng tám . Octrees chủ yếu được sử dụng trong các trò chơi 3d, trong khi quadrees có thể được sử dụng trong các trò chơi 2d hoặc 3d. Ưu điểm của việc sử dụng một trong những cây này là bạn có thể giảm đáng kể số lần kiểm tra va chạm có thể xảy ra. Ví dụ: nếu bạn có 20 đối tượng hoạt động ở cấp độ, mà không sử dụng một trong những cây này, bạn sẽ phải kiểm tra tất cả 20 đối tượng có va chạm với viên đạn không. Chia 20 đối tượng giữa các lá (nút cuối) của cây và bạn có thể giảm số lần kiểm tra xuống tuy nhiên nhiều thực thể có mặt trong cùng một lá với viên đạn.

Đối với các phương pháp này - hitcan và đạn, cả hai có thể được sử dụng tự do trong các trò chơi 2d hoặc 3d. Nó phụ thuộc nhiều hơn vào vũ khí là gì và người sáng tạo đã quyết định vũ khí đó sẽ hoạt động như thế nào.


Thông tin về mẫu thiết kế, Số lượt truy cập và quad / octrees thực sự hữu ích. Ngoài ra, cảm ơn thông tin!
Eric

8
Nếu bạn không kiện một hitcan nhưng mô phỏng các viên đạn, chúng có thể di chuyển qua các vật thể mỏng vì chúng di chuyển quá nhanh. Trong trường hợp đó hãy nhớ rằng eveyrthing trong game là giả. Mặc dù một viên đạn chỉ dài vài cm, bạn có thể thực hiện phát hiện va chạm như thể viên đạn dài một mét. Bằng cách này, bạn vẫn có thể thực hiện thả đạn đẹp và thời gian mô phỏng chuyến bay mà không phải lo lắng quá nhiều về việc đạn vênh qua các vật thể mà không trúng chúng :).
Roy T.

2
Có những trò chơi mà vật lý của đạn (trái ngược với đạn pháo) tôn trọng những thứ như trọng lực (thả đạn), sức cản không khí? (Nghĩa là, các trò chơi bên cạnh các trò chơi đặc biệt mà trọng tâm là bắn mục tiêu chính xác hoặc đại loại như thế: FPS, v.v.) Tôi không phải là một game thủ, nhưng tôi ngạc nhiên rằng mức độ trung thực là (thậm chí đôi khi) là cần thiết.
davidbak

3
@davidbak: nó phụ thuộc mạnh mẽ vào cuộc chạm trán trong trò chơi điển hình và chủ nghĩa hiện thực được mong đợi từ thể loại trò chơi. Nếu bạn chủ yếu (chỉ?) Chiến đấu cận chiến, thì quả thực, mức độ trung thực đó là không cần thiết. Nhưng nếu tùy chọn cho chiến đấu tầm xa tồn tại (ví dụ như bắn tỉa, hoặc cung thủ trong một thiết lập giống RPG hơn), thì tên lửa ảnh hưởng đến trọng lực hiện nay là loại được mong đợi. Nếu bạn nhắm bệ phóng tên lửa của mình lên trên, bạn vẫn mong muốn tên lửa hạ cánh và phát nổ ở đâu đó, phải không? Tuy nhiên, các quỹ đạo không phải lúc nào cũng được tính toán từ vật lý thực tế, chỉ là một xấp xỉ (vì lý do hiệu suất)
hoffmale

1
@davidbak Battlefield kể từ khi Bad Company 2 bị thả đạn. Cả hai cho súng trường, súng lục, đạn xe tăng, tên lửa, tất cả mọi thứ. Battlefield 3 miễn phí trên Origin, bạn có thể kiểm tra (IIRC). Battlefield 4 tất nhiên, cũng có 'tính năng' này. Trò chơi khác mà bạn có thể thấy đây là "Sniper Elite". 2 hoặc 3 là những tiêu đề mới hơn. Vật lý đóng một vai trò quan trọng trong trò chơi đó.
Apache

7

Tôi không có nghĩa là một chuyên gia, nhưng để trả lời câu hỏi của bạn, vâng, bạn sẽ cần nhiều trong số những điều bạn đề cập.

Đối với ví dụ 2D của bạn, bạn có thể có vị trí và vận tốc cho một viên đạn. (Bạn cũng có thể cần một khoảng cách trọn đời hoặc tối đa, tùy thuộc vào cách bạn triển khai đạn.) Điều đó thường liên quan đến 2 (x, y). Nếu chúng là float, đó là 16 byte. Nếu bạn có 100 viên đạn, đó chỉ là 1600byte hoặc khoảng 1,5k. Hôm nay không có gì trên máy.

Tiếp theo, bạn đề cập đến các sprite. Bạn sẽ chỉ cần một sprite duy nhất để đại diện cho mỗi viên đạn. Kích thước của nó sẽ phụ thuộc vào độ sâu bit bạn vẽ và độ lớn của nó sẽ xuất hiện trên màn hình. Ngay cả khi không nén tại, giả sử, 256x256 trong toàn bộ float 32 bit trên mỗi kênh, đó là 1 MB cho sprite. (Và nó sẽ rất lớn!) Bạn sẽ vẽ cùng một sprite tại mỗi vị trí dấu đầu dòng, nhưng nó không chiếm thêm bộ nhớ cho mỗi bản sao của sprite. Nó sẽ tương tự cho một hiệu ứng hit-hit.

Bạn đề cập đến việc bắn mỗi 0,01 giây. Đó sẽ là 100 viên đạn mỗi giây từ vũ khí của bạn. Ngay cả đối với một vũ khí tương lai đó là khá nhiều! Theo bài viết trên wikipedia này :

Khi kích hoạt được kéo, tốc độ bắn được là tốc độ theo chu kỳ. Tốc độ bắn theo chu kỳ điển hình là 600 ngọn 900 RPM cho súng trường tấn công, 1.000-1.100 vòng / phút trong một số trường hợp, 900-1.200 vòng / phút đối với súng tiểu liên và súng máy và 600-1.200 vòng / phút đối với súng máy. M134 Minigun gắn trên máy bay trực thăng tấn công và các phương tiện chiến đấu khác có thể đạt tốc độ bắn hơn 100 viên mỗi giây (6.000 vòng / phút).

Vì vậy, đó sẽ là tỷ lệ của một máy bay trực thăng tấn công!

Đối với một thế giới rộng lớn như bạn đề cập trong Battlefield / Call of Duty / v.v., họ có thể tính toán tất cả các vị trí viên đạn đó, nhưng không rút ra tất cả chúng nếu hành động ở xa. Hoặc họ có thể không mô phỏng chúng cho đến khi bạn đến gần. (Tôi phải thừa nhận rằng tôi đoán một chút về phần này vì tôi đã không làm việc với bất cứ điều gì lớn như vậy.)


6

Bộ xử lý sẽ không khó để xử lý hàng ngàn đối tượng này được khởi tạo, sau đó bị hủy (khi hiệu ứng tấn công được kích hoạt)? Dung lượng RAM?

Tôi nghĩ rằng bạn đang đánh giá thấp máy tính nhanh như thế nào. Đây đôi khi một vấn đề trên hệ thống của những năm 80 và 90. Đó là một phần lý do tại sao Kẻ xâm lược không gian ban đầu sẽ không cho phép bạn bắn một viên đạn khác cho đến khi viên đạn hiện tại đã bắn trúng. Một số trò chơi bị "chậm" nếu có quá nhiều họa tiết trên màn hình.

Ngày nay, mặc dù? Bạn có đủ sức mạnh xử lý cho hàng ngàn thao tác trên mỗi pixel được yêu cầu để thực hiện kết cấu và chiếu sáng. Không có vấn đề với hàng ngàn đối tượng chuyển động; điều này cho phép bạn thực hiện địa hình có thể phá hủy (ví dụ: Red Faction) trong đó mọi mảnh vỡ đều xử lý va chạm với các mảnh khác và đi theo một đường cong đạn đạo.

Bạn cần cẩn thận một chút về mặt thuật toán - bạn không thể thực hiện phương pháp ngây thơ là kiểm tra mọi đối tượng chống lại mọi đối tượng khác khi bạn có hàng ngàn đối tượng. Đạn thường không kiểm tra va chạm với các viên đạn khác.

Một giai thoại nhỏ: phiên bản đầu tiên của Doom nối mạng (bản gốc của thập niên 90) đã gửi một gói qua mạng cho mỗi viên đạn được bắn. Khi một hoặc nhiều người chơi có súng máy, điều này có thể dễ dàng áp đảo mạng. Thập niên 90 đầy những người chơi Doom bất hợp pháp trên các trường đại học hoặc mạng làm việc gặp rắc rối với các quản trị viên mạng của họ khi mạng trở nên không sử dụng được.


Tôi tự hỏi làm thế nào cưa máy làm việc trong bối cảnh này
reas0n

1
IIRC, vấn đề thực sự với sự sụp đổ của mạng đầu tiên là nó tránh được việc phải gửi từng gói riêng biệt cho mọi người chơi đối thủ bằng cách sử dụng các gói phát sóng thay thế. Điều đó đã làm giảm số lượng gói được gửi, nhưng không may gây ra tải CPU đáng kể cho mọi máy trên mạng, bao gồm cả những gói không chơi trò chơi.
supercat

1

Tôi xa một chuyên gia nhưng tôi đã làm việc trên một game bắn súng 2D nhiều người chơi trong thời gian rảnh rỗi.

Phương pháp của tôi

Có nhiều lớp đạn khác nhau giữa máy khách và máy chủ (ngay cả khi chơi ngoại tuyến, một phiên bản máy chủ được bắt đầu trên một quy trình riêng biệt và được kết nối với trò chơi 'chính').

Mỗi tích tắc (60 mỗi giây), máy khách sẽ tìm ra một mối liên hệ giữa con trỏ chuột của người chơi và trung tâm của màn hình (nơi có nhân vật của họ) và đó là một phần thông tin được gửi đến máy chủ. Nếu người chơi cũng đang bắn vào thời điểm đó (giả sử vũ khí đã được nạp và sẵn sàng), một trường hợp viên đạn phía máy chủ được tạo ra, chỉ với một số tọa độ và sát thương cơ bản (xuất phát từ chỉ số của vũ khí đã bắn nó). Ví dụ viên đạn sau đó sử dụng một số hàm toán học để tính ra vận tốc X và Y từ ổ trục mà chúng ta thu thập được từ máy khách.

Đối với mỗi lần đánh dấu tiếp theo, viên đạn tự di chuyển theo các tọa độ đó và giảm sát thương cơ bản của nó xuống một lượng được xác định trước. Nếu giá trị này giảm xuống dưới 1 hoặc nếu nó chạm vào một vật thể rắn trên thế giới, thì trường hợp viên đạn sẽ bị xóa và vì các va chạm điểm thử nghiệm rất rẻ trong 2D, ngay cả vũ khí bắn nhanh cũng có tác động không đáng kể đến hiệu suất.

Đối với máy khách, thông tin dấu đầu dòng không thực sự nhận được qua mạng (nó tỏ ra lãng phí khi thử nghiệm), thay vào đó là một phần của bản cập nhật mỗi lần đánh dấu, mỗi ký tự có Boolean 'bắn', nếu đúng thì máy khách tạo ra một cục bộ đối tượng đạn hoạt động gần như chính xác như máy chủ, sự khác biệt duy nhất là nó có sprite.

Điều này có nghĩa là mặc dù viên đạn mà bạn nhìn thấy không phải là đại diện hoàn toàn chính xác của nó trên máy chủ, nhưng bất kỳ sự khác biệt nào sẽ hầu như không đáng chú ý nếu hoàn toàn không xảy ra với người chơi và mạng có lợi hơn bất kỳ sự mâu thuẫn nào.

Lưu ý về các phương pháp khác nhau

Một số trò chơi, bao gồm cả trò chơi của riêng tôi, di chuyển các viên đạn mỗi lần như thể chúng là vật thể vật lý, trong khi các trò chơi khác chỉ tạo ra một vectơ theo hướng bắn hoặc tính toán toàn bộ đường đi của viên đạn trong tích tắc, ví dụ như trong Counter- Trò chơi tấn công. Có một vài thủ thuật nhỏ phía khách hàng để ngụy trang nó như hoạt hình của viên đạn, nhưng với tất cả ý nghĩa và mục đích, mỗi viên đạn chỉ là một tia laser .

Với các mô hình 3D có thể có hộp hit phức tạp, đó là tiêu chuẩn để kiểm tra va chạm với hộp giới hạn đơn giản FIRST và nếu thành công, hãy tiếp tục phát hiện va chạm 'chi tiết' hơn.


0

Nó được gọi là phát hiện va chạm. Máy tính 8 bit đã làm điều này bằng cách sử dụng đồ họa tên lửa người chơi trong phần cứng. Công cụ trò chơi hiện đại sử dụng công cụ vật lý và đại số tuyến tính. Hướng hiện tại của vũ khí được thể hiện dưới dạng vector 3D. Điều đó cung cấp một dòng vô hạn theo hướng lửa. Mọi vật thể chuyển động đều có một hoặc nhiều quả cầu giới hạn vì đó là vật thể đơn giản nhất để phát hiện va chạm với đường thẳng. Nếu hai người giao nhau, đó là một cú đánh, nếu không, sẽ không có cú đánh nào. Nhưng phong cảnh có thể cản trở, do đó cũng phải được kiểm tra (sử dụng khối lượng giới hạn phân cấp). Đối tượng gần nhất có giao lộ là đối tượng đã bị tấn công.

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.