2012-05-16 60 views
21

Tôi đang viết mô phỏng hệ thống năng lượng mặt trời đơn giản. Đây là dự án libgdx đầu tiên của tôi. Tôi đang sử dụng một giai đoạn và diễn viên cho menu chính và khá tiện dụng đặc biệt là các sự kiện liên lạc xử lý. Nhưng ... nhìn vào các ví dụ tôi thấy không ai sử dụng các diễn viên trong logic trò chơi thực tế. Tôi đi lang thang nếu tôi nên sử dụng diễn viên như là một phụ huynh của lớp hành tinh hoặc chỉ viết lớp học của riêng tôi tor đó. Các hành tinh sẽ không thể chạm được và chúng sẽ chỉ được di chuyển giữa các khung để tham số thứ ba của hành động MoveBy sẽ phải là thời gian giữa các khung. Đó là nhược điểm. Những thuận lợi cho việc sử dụng diễn viên là gì?Khi nào sử dụng diễn viên trong libgdx? Khuyết điểm và ưu điểm là gì?

+5

Tôi tin rằng rất nhiều ví dụ về libGDX đã được hỗ trợ trước Stage + Actor, do đó có thể giải thích tại sao họ không sử dụng nó. –

Trả lời

36

Ưu điểm chính của diễn viên là Hành động, Thử nghiệm lần truy cập và sự kiện chạm và Nhóm diễn viên.

Hành động làm cho việc tween nhanh chóng và dễ dàng nếu logic trò chơi của bạn cần điều đó. Bạn có thể gọi stage.hit (x, y) bất cứ lúc nào để trả về tác nhân đầu tiên trả về true cho bất kỳ logic truy cập nào bạn viết cho nó (thường kiểm tra các giới hạn với x, y, chiều rộng, chiều cao). trả về tác nhân này hoặc null để tiếp tục lặp lại thông qua các phương thức hit của các tác nhân tìm kiếm một diễn viên nhấn. Null được trả về nếu không có diễn viên nào bị tấn công.

Lần truy cập được sử dụng cho các sự kiện liên lạc của Giai đoạn. Phương thức chạm của diễn viên được chuyển qua các tọa độ cục bộ và Giai đoạn xử lý chồng lấp các đối tượng, ví dụ: nếu một diễn viên bao gồm một diễn viên khác sao cho diễn viên kia không nhận được touchDown, hãy trả về true trên diễn viên cover để ngừng việc gọi touchDown trên diễn viên "bên dưới". Điều này cũng đặt 'tập trung' vào diễn viên trả về true để touchUp của diễn viên sẽ được gọi.

Bạn có thể nhóm các diễn viên lại với nhau để thực hiện Tác vụ, chạm sự kiện, v.v. trên toàn bộ Nhóm diễn viên dưới dạng một đơn vị.

Một số nhược điểm: Diễn viên yêu cầu giai đoạn giới hạn chức năng một chút. Nhiều lập trình viên sử dụng logic khác để xác định trạng thái đối tượng trò chơi, thay vì hành động scene2d (ví dụ: box2d). Nếu bạn sử dụng diễn viên cho các đối tượng trò chơi, bạn có thể sẽ muốn hai giai đoạn, một cho ui và một cho thế giới trò chơi. Nếu bạn không sử dụng chúng, có thể bạn sẽ sử dụng SpriteBatch và Camera của chính mình. Và hãy nhớ rằng các diễn viên chỉ có một phương thức Draw trừu tượng, do đó bạn vẫn cần phải tạo ra logic vẽ. Bạn có thể sẽ giữ một TextureRegion hoặc Sprite như một trường riêng cho Actor. Nếu bạn muốn sử dụng logic cập nhật của riêng mình, bạn có thể ghi đè phương thức act (float delta) để có được thời gian delta (gọi super.act (delta) nếu bạn sử dụng Actions).

Vì vậy, nếu bạn có logic của riêng mình và sẽ không sử dụng nhiều thứ mà Stage cung cấp, hãy lưu một số tài nguyên và cuộn giải pháp dành riêng cho ứng dụng của riêng bạn. Nếu bạn có thể sử dụng một số ưu điểm mà không giới hạn chức năng cần thiết thì hãy vào Giai đoạn thứ hai cho logic trò chơi.

+1

Bạn có thể sử dụng cả hai Scene2D và box2d, mặc dù thừa nhận rằng một số điều có thể trở nên khó xử. Nói chung, mặc dù nó hoàn toàn có thể và tôi thực sự đang làm nó. Đối với các đối tượng động, bạn chỉ cần lấy được vị trí của diễn viên từ mô hình vật lý. Điều này có nghĩa là tất nhiên 'hành động' là hơi vô nghĩa, vì chuyển động chỉ đi từ vật lý đến diễn viên, chứ không phải ngược lại. Tuy nhiên, bạn vẫn nhận được xử lý đầu vào, một hệ thống sự kiện, xử lý máy ảnh và phối hợp ánh xạ miễn phí. Các hành động vẫn có thể được sử dụng cho các phần tử trực quan mà không có vật lý vật lý (ví dụ: các mục được trang bị, các hiệu ứng sprites, v.v.) – Matthias

Các vấn đề liên quan