Cách tạo hiệu quả các mẫu đạn


8

Tôi hiện đang tạo ra một game bắn súng từ trên xuống như Touhou. Yếu tố quan trọng nhất của trò chơi là có nhiều kiểu và cách thức bắn đạn và bắn vào người chơi, xem video này: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; kết thúc = 9: 53 ;

Hiện tại, tôi đang sử dụng một lớp "Mẫu" có một loạt các bước để di chuyển và chụp. Tuy nhiên, tôi cảm thấy phương pháp này khá tốn công vì tôi phải tạo một Mẫu mới cho mỗi cuộc tấn công và có lẽ các lớp Bullet mới sẽ thực hiện một hành vi nhất định.

Câu hỏi này nhận được một bình luận cho thấy tôi nên xem xét BulletML để dễ dàng tạo và lưu trữ đạn với một mẫu cụ thể. Có vẻ tốt, nhưng nó khiến tôi tự hỏi, bạn có những giải pháp nào khác mà tôi nên xem xét?

Cập nhật

Thiết kế hiện tại của tôi như sau:

Sơ đồ UML

Một ví dụ về một mẫu đã triển khai:

GigasPotype của tôi trước tiên thực hiện dịch chuyển tức thời di chuyển Alice đến một điểm nhất định (X, Y) trên màn hình. Sau khi hoàn thành, mẫu bắt đầu sử dụng Mover để di chuyển sprite xung quanh (trong khi dịch chuyển tức thời có hiệu ứng và hoạt hình riêng biệt). Đây không phải là mối quan tâm, thực sự, vì chúng khá đơn giản.

Shooter cũng tạo ra nhiều Tấn công khác nhau, đó là các lớp một lần nữa mà Shooter có thể sử dụng để tạo ra nhiều kiểu đạn khác nhau, giống như trong câu hỏi tôi đã đăng. Khi Mover đã đến đích, cả nó và người bắn đều dừng lại và trở về trạng thái không hoạt động. Mẫu hoàn thành, được loại bỏ bởi AI và một mẫu mới được chọn.

Câu trả lời:


4

Dù có khó khăn đến đâu đi chăng nữa, việc tạo ra một mức độ như vậy có vẻ như là một nhiệm vụ dễ dàng, và nó có thể không quá khó khăn, nhưng nó sẽ luôn mất rất nhiều thời gian. (Một ước tính rất sơ bộ: 1000 lần thời gian phát cho một thứ hay ho như video đó.)

Nếu bạn sử dụng ngôn ngữ kịch bản, bạn vẫn phải viết chính xác cùng một mã, chỉ bằng một ngôn ngữ khác, lợi thế là bạn có thể tạo các cấp độ kịch bản mà không làm rối mã được biên dịch. Nếu bạn làm việc trong một nhóm lớn, bạn chắc chắn muốn điều đó, nhưng là một nhà phát triển duy nhất, điều đó thường không tạo ra sự khác biệt lớn.

Bản thân BulletML không phải là một câu trả lời, bạn cần triển khai bằng ngôn ngữ của mình, giao diện này phải giao tiếp với phần còn lại của trò chơi. Và vẫn còn một công việc khổng lồ là viết tất cả các tệp XML đó.

Tôi có xu hướng nói rằng bạn nên tuân theo việc lập trình các mẫu mong muốn trong các lớp như bạn làm, nhưng có lẽ bạn có thể tiết lộ một số mẫu về cấu trúc hiện tại của mình, có thể có những cải tiến để thực hiện.

Chỉnh sửa:
Có thể có một nhận thức có thể đơn giản hóa mọi thứ một chút và cung cấp cho bạn hộp công cụ tốt hơn một chút. Bạn có thể mô tả AI là một mô hình, lý tưởng là chỉ có một loại thực thể, nhưng bất kỳ thực thể nào như vậy có thể chọn gọi một thực thể khác cùng loại để thực hiện công việc. Điều này sẽ loại bỏ bạn khỏi mọi giới hạn về mức độ bạn có thể lồng truyền trách nhiệm và cung cấp cho bạn một loại lớp ít hơn để suy nghĩ.

Ít nhất đó là những gì tôi thu thập được từ sơ đồ. Mặc dù bạn đúng nên giới hạn số lượng mã bạn đưa vào một câu hỏi, không bao giờ có sự thay thế hoàn toàn để xem một số mã thực tế.


Chắc chắn, cảm ơn sự giúp đỡ. Tôi đã bao gồm một sơ đồ UML đơn giản hóa cho thiết kế hiện tại của tôi cũng như một ứng dụng ví dụ về thiết kế đang hoạt động. Tôi hy vọng nó sẽ giúp!
IAE

2

Có lẽ bạn có thể thực hiện một ngôn ngữ kịch bản nhỏ cho riêng trò chơi của mình. Sau đó, bạn sẽ có thể kịch bản các hành vi đạn bằng cách thêm các tập lệnh mới. Ưu điểm của ngôn ngữ kịch bản riêng là bạn có thể sử dụng ngôn ngữ đó ở các phần khác của trò chơi. Hoặc bạn có thể thử sử dụng Lua (Tôi không biết bạn đang sử dụng ngôn ngữ / khung nào). Nhưng theo tôi Lua sẽ là một sự quá mức nếu bạn chỉ muốn có các mẫu Movin.

Giữa: Tôi đã làm điều này đã cho một game bắn súng không gian, nhưng cho hành vi của kẻ thù. Nó hoạt động tốt, vì vậy bạn thực sự có thể thử nó.


Tôi đang sử dụng AS và nó không cho vay quá tốt để sử dụng bất kỳ tài nguyên cục bộ nào, tuy nhiên sử dụng ngôn ngữ kịch bản hoặc XML có thể có giá trị đối với tôi, vì vậy xin cảm ơn về đề xuất này.
IAE

2

Tôi đã ở trong tình huống tương tự chính xác một thời gian trước đây và bắt đầu thực hiện kiến ​​trúc của riêng tôi cho các mẫu đạn. Mặc dù vậy, tôi đã từ bỏ vì tôi bắt gặp triển khai BulletML cho C # / XNA: BulletML C #

Tôi đã phải thực hiện một vài thay đổi, nhưng bây giờ việc tạo ra các mô hình trông thật ngoạn mục thực sự rất dễ dàng. Có một bản demo tuyệt vời ở đây cho bạn thấy làm thế nào, một vài dòng XML, có thể tạo ra các mẫu tuyệt vời.

Nếu bạn đang làm việc trên C #, tôi khuyên bạn nên tránh phát minh lại bánh xe. Đặc biệt nếu bạn muốn có những mẫu rất phức tạp. Có thể mất một chút thời gian để quấn đầu bạn xung quanh BulletML, nhưng, theo tôi, nó rất đáng để bạn dành thời gian.

Tuy nhiên, nếu bạn quyết định không sử dụng BulletML, thì ít nhất, hãy xem mã C # và có ý tưởng về kiến ​​trúc của nó. Nó có thể cung cấp cho bạn một số ý tưởng.


Cảm ơn! Tôi mới bắt đầu chuyển khỏi ActionScript cho dự án này và hiện đang viết nó bằng C # / XNA. Tôi chắc chắn sẽ xem mã, cảm ơn.
IAE
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.