Tôi có nên sử dụng Lua cho logic trò chơi trên thiết bị di động không?


33

Như trên thực sự,

Tôi đang viết một trò chơi dựa trên Android trong thời gian rảnh rỗi (Android vì nó miễn phí và tôi không có khát vọng thực sự để làm bất cứ điều gì thương mại).

Logic trò chơi xuất phát từ một mô hình dựa trên thành phần rất điển hình, theo đó các thực thể tồn tại và có các thành phần gắn liền với chúng và các thông điệp được gửi tới và gửi đi để làm cho mọi thứ xảy ra.

Rõ ràng là lớp để thực sự hoạt động mỏng và nếu tôi viết phiên bản iPhone của ứng dụng này, tôi sẽ phải viết lại trình kết xuất và trình điều khiển lõi (của hệ thống dựa trên thành phần này) trong Objective C.

Các thực thể chỉ là các tệp phẳng xác định tên của các thành phần sẽ được thêm vào và chính các thành phần đó là các đối tượng đơn giản, đơn mục đích chứa logic cho thực thể.

Bây giờ, nếu tôi viết tất cả logic cho các thành phần đó trong Java, thì tôi sẽ phải viết lại chúng trên Objective C nếu tôi quyết định thực hiện một cổng iPhone. Do phần lớn logic ứng dụng được chứa trong các thành phần này, nên trong một thế giới lý tưởng, chúng sẽ được viết bằng một ngôn ngữ / kịch bản / ngôn ngữ bất khả tri nào đó có thể được tải vào ứng dụng trên bất kỳ nền tảng nào.

Tuy nhiên, tôi đã được tin rằng đây không phải là một thế giới lý tưởng, và hiệu suất Lua, v.v. trên các thiết bị di động vẫn không bị trầy xước, rằng chi phí quá cao và sau này tôi sẽ gặp rắc rối đã đi xuống tuyến đường đó?

Đây thực sự là trường hợp? Rõ ràng đây chỉ là một câu hỏi giả định, tôi rất vui khi viết tất cả bằng Java vì nó đơn giản và dễ dàng khiến mọi thứ trở nên dễ dàng, nhưng nói rằng tôi thực sự thích làm trò chơi này (không chắc là tôi không thích phải giải quyết bao nhiêu với tất cả các thiết bị di động khác nhau) và tôi muốn tạo ra một trò chơi khả thi về mặt thương mại - tôi sẽ sử dụng Lua hay tôi sẽ thực hiện cú đánh khi chuyển sang và chỉ viết lại tất cả mã?

Câu trả lời:


17

Theo như ngôn ngữ kịch bản, Lua rất nhanh, nhưng giống như mọi thứ nó thay đổi tùy thuộc vào bộ xử lý. Ví dụ, Lua sẽ không tuyệt vời trên nền tảng giao diện điều khiển vì nó có xu hướng rất phân nhánh và một số nền tảng giao diện điều khiển phân nhánh rất chậm. Để trả lời tốt nhất câu hỏi của bạn, tôi khuyên bạn nên chạy một số điểm chuẩn. Xem Lua thực hiện nhanh như thế nào một số thuật toán khác nhau trên thiết bị. Tôi nghi ngờ bạn sẽ ổn miễn là bạn không thực hiện bất kỳ phép toán hay phép lặp nặng nào trong mã tập lệnh của mình. (Dù sao thì bạn cũng không nên làm điều đó. Chúng là các tập lệnh. Hãy tính toán trong công cụ.)

Điều đó nói rằng, kịch bản không phải là một viên đạn bạc cho sự độc lập nền tảng. Dù sao, bạn có thể cần phải viết lại trong Obj-C nếu bạn chuyển sang iPhone do các hạn chế của Apple trong việc thực thi mã động. Tôi không có liên kết trực tiếp, nhưng nó có thể đáng đọc. Apple hầu như không cho phép mã được quản lý (bạn phải có được sự cho phép đặc biệt để chạy phân phối đặc biệt). Họ chắc chắn sẽ không cho phép triển khai Lua vào cửa hàng ứng dụng.

[sửa] Rõ ràng là tôi đã nhầm về Lua trên iphone. Hãy xem các ý kiến ​​dưới đây.


9
Lua được sử dụng rộng rãi trong các ứng dụng iPhone và các thay đổi đã được thực hiện theo các điều khoản cho phép. Xem tại đây: appleoutsider.com/2010/06/10/hello-lua
Colin Gislason

5
Nhiều ứng dụng console thực sự sử dụng LUA. Vâng, nó phân nhánh - nhưng điều đó không thành vấn đề nếu bạn kiểm soát logic cấp cao. Chỉ cần không gọi nó từ vòng lặp kết xuất của bạn;) Theo như tôi biết, LUA cho các trò chơi vẫn ổn với những thay đổi gần đây đối với thỏa thuận của nhà phát triển - có rất nhiều trò chơi được LUA điều khiển. Nhưng như với bất kỳ sự phát triển nào trên nền tảng đóng, hãy hỏi chủ sở hữu nền tảng (tức là Apple) để có câu trả lời dứt khoát. Ngoài ra, không cần Obj-C - iPhone cho phép C / C ++ hoạt động tốt. (Tuy nhiên, tôi khuyên bạn nên làm bất cứ điều gì UIKit trong Obj-C. Giảm yếu tố đau)
Rachel Blum

7
Đi hộp ma thuật. Lua là một danh từ không phải là từ viết tắt, bạn sẽ không bao giờ viết JAVA. Lua có nghĩa là mặt trăng. Bạn sẽ không viết MOON. cảm ơn - Đức Quốc xã Lau.
deft_code

2
Đáng buồn thay, tôi biết nhiều người viết "JAVA".

1
Tôi đã sử dụng lua rất nhiều trên NDS (ít mạnh hơn IPhone) và nó hoạt động khá nhanh. Đủ nhanh để chúng tôi thực hiện hơn một nửa logic của một trò chơi trực tiếp trong lua.
Klaim

7

Việc triển khai C của Lua được thiết kế đặc biệt để chạy trên các thiết bị nhúng. Nó nhỏ và nhanh (đối với ngôn ngữ kịch bản). Tôi đã nghĩ rằng nó là tốt cho ít nhất các nhiệm vụ nhẹ.


4

Chắc chắn rồi. Logic kịch bản rất khó có thể là nút cổ chai của bạn (bạn thực sự sẽ lập hồ sơ với Shark hoặc Dụng cụ, phải không?). Tôi đã làm việc trên phiên bản iPhone của Marooned, sử dụng rất nhiều Lua cho logic trò chơi. Tôi đã thực hiện rất nhiều điều chỉnh hiệu suất, và về cơ bản Lua là 0%.

(Lua là một khu vực màu xám khi chúng tôi phát hành Marooned, nhưng nó đã chính thức được ban phước cho sự phát triển iOS.)



1

Nó phụ thuộc một chút vào bao nhiêu logic trò chơi của bạn được nhúng trong các tập lệnh. Nói chung LUA được sử dụng như keo cấp độ cao nhưng rất nhiều công việc lẩm cẩm xảy ra thông qua C (++). Có, LUA nhanh như các ngôn ngữ kịch bản đi - bạn vẫn đang nhìn chậm lại so với ngôn ngữ bản địa khoảng 30 đến 50 lần, vì vậy nó thực sự phụ thuộc vào mức độ xảy ra trong LUA.


0

Bạn thực sự có thể viết toàn bộ trò chơi của mình bằng Lua và tránh hoàn toàn Java / ObjectiveC / C / C ++.

Để phát triển đa nền tảng, hãy sử dụng Corona . Nó miễn phí sử dụng cho đến khi bạn có kế hoạch gửi đến App Store hoặc Android Marketplace.

Nếu bạn muốn nhắm mục tiêu iPhone / Pad / Touch, hãy xem sáp .

Cũng như một ghi chú bên lề @Sean Edwards: Tôi đã tham gia vận chuyển năm tựa game nhắm vào Nintendo DS, Wii, Sony PSP và Xbox360, tất cả đều sử dụng cùng một công cụ và được viết theo kịch bản trong Lua. Nó được sử dụng rộng rãi trên bảng điều khiển và điện thoại di độ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.