Trong game bắn súng, đường đạn được mô phỏng như thế nào?
Rất hay và hữu ích!/10 người
P.W
một tháng trướcBình luận: 63Lượt xem: 53.875
Chỉ vào rồi bắn chứ không nghĩ nó phức tạp thế
Tính cả độ giật giật của súng ghê
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
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
Anh em chơi call of duty mobile điểm danh 🕺🏻
Kiến thức bổ ích
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
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.)
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.
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
Bạn
Hi bạn!
Cấp độ thành viên Tinh Tế
Điểm Reward Store
Tuổi Tinh tế


Tải app Tinh tế

Tải app Tinhte - Theo dõi thông tin mà bạn yêu thích

Tải app TinhteTải app Tinhte
Tải app Tinh tế cho Android trên Google PlayTải app Tinh tế cho iPhone, iPad trên App Store

0 bài đăng
hemilo+ 254VIPhemilo
10.471 bài đăng
hoangsytai+ 169CAO CẤPhoangsytai
3.727 bài đăng
quangthegtvtk49+ 165CAO CẤPquangthegtvtk49
5.551 bài đăng
0 bài đăng
  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2020 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: 209 Đường Nam Kỳ Khởi Nghĩa, Phường 7, Quận 3, TP.HCM
  • Số điện thoại: 02862713156
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019