Chỉ cần rất tò mò về điều này, từ kinh nghiệm của riêng tôi, tất cả các chương trình đồ họa có vẻ liên quan đến C hoặc C++. Giống như Direct10X. Ngôn ngữ lập trình chức năng có cung cấp một số loại thư viện đồ họa để phát triển trò chơi điện tử không?Các ngôn ngữ lập trình chức năng có phù hợp với lập trình đồ họa không?
Trả lời
Bạn có thể sử dụng các ngôn ngữ chức năng để lập trình đồ họa/trò chơi giống như bất kỳ ngôn ngữ nào khác.
Nó chỉ là một trò chơi đơn giản, nhưng tôi đã viết Ironclad: Steam Legions trong Clojure như một bài tập trong lập trình chức năng để phát triển trò chơi.
Dưới đây là một số bài học tôi đã học/quan sát chung về việc sử dụng Clojure cho lập trình trò chơi:
Bạn cần phải cẩn thận về hiệu suất như các trò chơi có thể rất khắt khe và các ngôn ngữ chức năng làm áp đặt một số chi phí chung. Clojure chắc chắn là "đủ tốt" cho hầu hết các trò chơi, nhưng bạn cần phải biết các thủ thuật để giữ cho mã của bạn được tối ưu hóa. Ví dụ, ngôn ngữ chức năng có thể nhận được một chút GC-nặng sản xuất rất nhiều đối tượng tạm thời. Bạn cần phải tìm hiểu những thủ thuật để tránh điều này (ví dụ, sử dụng giảm theo một cách mà tránh tạo các đối tượng chuỗi mới, hoặc tận dụng artithmetic nguyên thủy)
mutability rất hữu ích trong trò chơi. Ví dụ, nếu bạn đang làm bất cứ điều gì với vật lý hoặc hoạt hình trơn tru, bạn thường có rất nhiều đối tượng với vị trí thay đổi liên tục. Bạn có thể mô phỏng điều này với cấu trúc dữ liệu chức năng/không thay đổi nhưng nếu bạn quan tâm đến hiệu suất thì đó không phải là một ý tưởng hay. Do đó nó có giá trị tìm hiểu làm thế nào để có được dữ liệu có thể thay đổi trong ngôn ngữ chức năng của bạn ngay cả khi nó không phải là thành ngữ (ví dụ trong Clojure bạn có thể sẽ muốn tận dụng mảng Java)
Bất biến cấu trúc dữ liệu dai dẳng thực sự lần lượt ra cũng rất hữu ích trong trò chơi. Trong Ironclad, toàn bộ trạng thái trò chơi được lưu trữ trong một cấu trúc dữ liệu bất biến duy nhất. Điều này cho phép một số thủ thuật thú vị như chụp nhanh hiệu quả trạng thái trò chơi/hoàn tác tức thì/chạy ngược thời gian.
Clojure là tuyệt vời cho kịch bản trò chơi. Bản chất động cùng với việc biên dịch thời gian chạy và khả năng xác định các DSL tùy ý bằng các macro là một chiến thắng lớn. Trong thực tế, ngay cả khi tôi đang viết một trò chơi bằng ngôn ngữ OOP như Java, tôi sẽ xem xét nghiêm túc việc sử dụng Clojure (hoặc một Lisp khác) để viết kịch bản.
Clojure là tuyệt vời cho phát triển tương tác. Tôi thường thấy mình chạy trò chơi trong một cửa sổ trong khi hack mã đang chạy trong REPL cùng với. Thật thú vị khi thay đổi cấu trúc dữ liệu trò chơi và ngay lập tức thấy hiệu ứng! This awesome video cũng cung cấp cho bạn một hương vị của những gì có thể với sự phát triển theo phong cách Clojure.
Trong Clojure ít nhất bạn sẽ thường muốn sử dụng các thư viện Java cho đồ họa, ví dụ: Swing cho 2D hoặc LWJGL cho 3D. Trong một số trường hợp các trình bao bọc cho những thứ này đã tồn tại, tuy nhiên tôi thấy dễ dàng sử dụng chúng trực tiếp từ Clojure.Sau khi tất cả, Java interop cũng đơn giản như
(.methodName object arg1 arg2)
Tóm lại, tôi nghĩ rằng ngôn ngữ chức năng là sự lựa chọn hoàn toàn tốt cho sự phát triển trò chơi, với ngoại lệ của trò chơi rất năng chuyên sâu mà bạn vẫn có khả năng được tốt hơn với C/C++ để có quyền kiểm soát trực tiếp hơn phần cứng.
Đây là một chuỗi tốt về chủ đề: (4 phần) Purely Functional Retrogames. Bạn có thể sử dụng phương pháp này trong Clojure và sử dụng các thư viện trò chơi Java bên dưới để thao tác đồ họa.
bộ phim rất hấp dẫn, cảm ơn u – castiel
Có lẽ không ai quan tâm đến câu hỏi này năm tuổi, có lẽ thậm chí không phải là người hỏi ban đầu. Nhưng với tư cách là một anh chàng đồ họa thời gian cũ của Lisp, tôi muốn cân nhắc. Tiêu đề đề cập đến “lập trình đồ họa”, sau đó câu hỏi hỏi về các thư viện để phát triển game. Đáng chú ý là lập trình đồ họa bao gồm nhiều chủ đề không liên quan đến lập trình trò chơi. (Ví dụ, việc trực quan hóa dữ liệu trong Clojure sẽ là một ví dụ về "ngôn ngữ lập trình chức năng thích hợp cho lập trình đồ họa" nhưng không phải là lập trình game.) Ngoài ra còn có sự khác biệt giữa các ngôn ngữ dựa trên chức năng (như Lisp). các hiệu ứng phụ được cho phép) và các ngôn ngữ hoàn toàn có chức năng với các kiểu dữ liệu không thay đổi (như Haskell hoặc Clojure).
Chắc chắn có hệ thống đồ họa dựa trên Lisp được viết theo kiểu "đa mô hình", nghĩa là, không hoàn toàn là chức năng/không thay đổi. Ví dụ, tôi đã làm việc tại Symbolics vào đầu những năm 1980, khi chúng tôi sản xuất một trong những hệ thống “tạo nội dung số” đầu tiên (như Maya hoặc AutoCAD) hoàn toàn trong Lisp. Luận án MS năm 1978 của tôi là về một ngôn ngữ dựa trên Lisp-specific-langauge cho hoạt ảnh thủ tục được gọi là ASAS. Chúng tôi đã sử dụng điều đó ở công ty 3-I (Information International Inc.) để thực hiện công việc CGI rất sớm cho các hiệu ứng đặc biệt trong phim truyện, bao gồm cả TRON của năm 1982. Cuối cùng, studio trò chơi Naughty Dog đã lập trình logic trò chơi của một số chức danh (Crash Bandicoot, Jak và Daxter series) với một ngôn ngữ được lấy cảm hứng từ Scheme gọi là Game Oriented Assembly Lisp (GOAL).
Phát biểu về những nỗ lực hiện đại hơn, và nghiêm chỉnh thêm chức năng/ngôn ngữ bất biến: “LambdaCube 3D là Haskell giống như hoàn toàn chức năng miền ngôn ngữ cụ thể cho các lập trình (đơn vị xử lý đồ họa) GPU.”
Trong bài phát biểu của John Carmack tại Quakecon 2013, ông đã nói rộng rãi (khoảng 30 phút) về sở thích và thử nghiệm của mình với các ngôn ngữ thuần túy để phát triển trò chơi. Quan điểm của ông dường như là có những lợi ích rõ ràng khi sử dụng lập trình chức năng, nhưng có một số thách thức, và rằng ông đã không đi đủ xa xuống con đường đó để có một ý kiến mạnh mẽ. Ông nói về thử nghiệm với cả Haskell và Lisp. Chủ đề này là từ 1: 17: 00-1: 49: 00 trong số video này.
- 1. Lưu đồ ngôn ngữ lập trình chức năng
- 2. Ngôn ngữ lập trình PHP hoặc ngôn ngữ lập trình?
- 3. Tôi nên chọn ngôn ngữ lập trình chức năng nào làm ngôn ngữ lập trình hàm đầu tiên?
- 4. Có công cụ trò chơi/đồ họa nào cho ngôn ngữ lập trình D không?
- 5. Cách kết hợp các ngôn ngữ lập trình khác nhau
- 6. Ngôn ngữ lập trình Siri
- 7. động Hầu hết các ngôn ngữ lập trình năng động
- 8. Dịch mã byte Java sang các ngôn ngữ lập trình và ngôn ngữ lập trình khác
- 9. Tạo ngôn ngữ lập trình với C#
- 10. ngôn ngữ lập trình không xác định
- 11. C# Ngôn ngữ lập trình
- 12. Giải phương trình chức năng lập trình
- 13. Ngôn ngữ lập trình đã nhập
- 14. CouchDB có phù hợp nhất với ngôn ngữ động không?
- 15. XSLT có phải là ngôn ngữ lập trình chức năng không?
- 16. Ngôn ngữ lập trình nào phù hợp với phát triển ứng dụng quan trọng trên web?
- 17. Ngôn ngữ lập trình có nên trực quan không?
- 18. Kiến trúc lập trình chức năng
- 19. Có ngôn ngữ lập trình nào hỗ trợ xml không?
- 20. Dart có hỗ trợ lập trình chức năng không?
- 21. Bất kỳ ngôn ngữ lập trình nào có chức năng gọi "lạ"?
- 22. Ngôn ngữ lập trình nào có trình biên dịch JIT?
- 23. Các dự án nguồn mở được viết bằng ngôn ngữ lập trình chức năng
- 24. Does/Will Rust có hỗ trợ các thành ngữ lập trình chức năng không?
- 25. Ngôn ngữ lập trình chức năng đơn giản nhất cho ai có nền trong ngôn ngữ mệnh lệnh?
- 26. gVim và nhiều ngôn ngữ lập trình
- 27. Làm cách nào để triển khai biểu đồ và thuật toán đồ thị bằng ngôn ngữ lập trình chức năng?
- 28. Đặt ngôn ngữ Wordpress theo lập trình?
- 29. Cần có những tính năng ngôn ngữ nào trong ngôn ngữ lập trình để tạo trình biên dịch?
- 30. Làm thế nào để thiết kế một ngôn ngữ lập trình phù hợp với các công cụ tài chính?
http://www.haskell.org/haskellwiki/Research_papers/Functional_reactive_programming –