Trong game bắn súng, đường đạn được mô phỏng như thế nào?

P.W
10/7/2020 9:59Phản hồi: 63
63 bình luận
Chia sẻ

Xu hướng

Chỉ vào rồi bắn chứ không nghĩ nó phức tạp thế
Vthanhlv
ĐẠI BÀNG
4 năm
Tính cả độ giật giật của súng ghê
Eldimio
CAO CẤP
4 năm
Counter-Strike cổ điển là hitscan, xa mấy vẫn ngắm đâu trúng đó, bóp cò là trúng. Ngay từ những ngày đầu, game Delta Force của Novalogic đã làm mô phỏng đạn đạo cực tốt. Mỗi phát đạn, game vẽ ra 1 đường đạn rất trực quan (dù thực tế sẽ không có), đường đạn đi đúng theo đường cong võng xuống, có tốc độ bay tương ứng với từng loại súng. Từ năm 98 mà họ đã làm được điều này.
đọc thấy đơn giản nhỉ, nhưng viết code bên dưới chắc chua lắm
@kedote Bình thường chứ chắc không chua. Xử lý đường đạn nó cũng không khó lắm. Như hiscan nhưng cắt ra từng đoạn nhỏ.
Trông thì cũng đơn giản mà để làm ra cũng kỳ công phết
Screenshot_2020-06-26-10-00-56-893_com.tencent.tmgp.cf.jpg
Hay
U.Keitaro
ĐẠI BÀNG
4 năm
bài viết hay
Bài viết dài quá.đọc hơi đau đầu
Nói chung cũng nể mấy ông lập trình game,chắc cả ngày chỉ ngồi ôm máy tính 🙄
Chỉ là đống biến số hỗn độn và anh em điều khiển mấy cái biến bằng cách thay đổi giá trị của nó bằng thiết bị nhập liệu đầu vào, vậy là thành trò chơi gây nghiện.
phức tạp
BondBond203
ĐẠI BÀNG
4 năm
Anh em chơi call of duty mobile điểm danh 🕺🏻
Kiến thức bổ ích
dangtu4444
TÍCH CỰC
4 năm
Nhìn cái game halo mà hoài niệm kinh, xưa có 2-3000 ,mấy thằng rủ nhau ra net lập mạng lan, bắn nhau thay cs 1.0 ,hét um cả quán
Mình ko chơi game bắn súng, bắn thì bắn súng thật luôn chứ game giếc gì
DBB115E8-8D90-41D5-A3DA-2177DA570837.jpeg
magic200395
ĐẠI BÀNG
4 năm
em k biết bác có phải là một game developer không nhưng em xin đóng góp một số ý cho bài dịch của bác.

Một cách đơn giản khi tối ưu engine game là tạo ra một ổ dữ liệu con, tải trước khi bắt đầu chơi để mô phỏng từng loại đạn có trong game. Một khi viên đạn chạm mục tiêu (đối thủ hoặc bắn vào tường), ổ dữ liệu này sẽ ngừng theo dõi và mô phỏng đường đi của viên đạn đó, tiết kiệm tài nguyên xử lý cho viên đạn kế tiếp, về cơ bản là nó biến mất, không còn giá trị sử dụng trong màn chơi nữa.

Cái đoạn này ổ dữ liệu con nên hiểu là tạo sẵn trước nhiều viên đạn và đưa vào trong một cái bể (pool), và đoạn sau, chỗ về cơ bản là nó biến mất là không đúng, lúc này viên đạn đã được tính toán xong đó sẽ quay lại cái pool ban đầu sẵn sàng cho lần bắn tiếp theo để tiết kiệm tài nguyên về cho việc phá hủy và tạo mới viên một viên đạn mới hoàn toàn. (This method will reduce some computation and memory costs from creating and destroying objects over and over again.)
magic200395
ĐẠI BÀNG
4 năm
Còn cái đoạn này

Tick được đo độc lập với thuật toán render đồ họa game, đồng nghĩa với việc khi chơi game bắn súng, những pha đấu sẽ được mô tả chính xác hơn vì vật thể được đo độc lập với tốc độ truyền hình ảnh từ máy tính lên màn hình. Tick càng cao, thì thuật toán càng phức tạp vì phải đo được độ trễ từ khung hình đã render trước đó là bao nhiêu mili giây.

Ý tác giả là số tick (logic/physics update rate)(nó là đơn vị thời gian nhỏ nhất trong game, có thể hiểu là những gì xảy ra trong một tích sẽ k thể chia bé được nữa) sẽ được tính toán độc lập với số fps (số khung hình trên giây là máy tính render được), nhờ đó nếu máy chơi game có chẳng may bị drops fps thì logic/physics game vẫn sẽ chạy đúng chứ không phải là tick càng cao thì thuật toán càng phức tạp đâu, độ phức tạp vẫn thế thôi chỉ là khối lượng công việc phải làm tăng thêm thôi.
magic200395
ĐẠI BÀNG
4 năm
Còn chỗ này

Đấy cũng là lúc những lỗi của game diễn ra khi anh em tưởng rằng mình đã bắn trúng địch rồi nhưng vì tốc độ khung hình và tốc độ tick sai lệch dẫn đến việc máy chủ ghi nhận anh em bắn trượt. Cái này ai chơi CS:GO chắc cũng gặp vài lần.

thì là không đúng đâu, cái này có nhiều nguyên nhân nhưng ở đây ý tác giả là do viên đạn quá nhanh nên là trong một tick nó sẽ đi được một khoảng cách khá là xa vậy thì nó sẽ dẫn đến một trường hợp khá là thú vị đó là ví dụ như ở tick trước thì viên đạn ở trước mặt nhân vật nhưng ở tick ngay sau đó (giả sử viên đạn bay được một khoảng lớn hơn đường kính đầu nạn nhân) viên đạn nó lại ở phía sau đầu nạn nhân dẫn đến không xảy ra va chạm do trong tất cả các tick đã tính toán thì rõ ràng viên đạn không ở vị trí va chạm với đầu nạn nhân sẽ dẫn đến không trúng mặc dù rõ ràng nó lẽ ra phải trúng
Trường hợp này các game engine hiện đại chắc đều có solution rồi, nhưng đơn giản nhất là tăng số tick mỗi giây lên để cho khoảng cách bay được mỗi tick sẽ bé thôi để giảm sai sót

Xu hướng

Bài mới









  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2024 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019