Tôi nên di chuyển thế giới hay di chuyển người chơi?


11

Tôi sắp bắt đầu phát triển một trò chơi sidecrolling trong đó mục tiêu của người chơi là đi xa nhất có thể theo trục ngang trước khi chạm xuống. Lưu ý rằng tôi không cần phải quay lại trục ngang.

Tôi đang phát triển điều này với AndEngine cho Android sử dụng OpenGL và Box2d.

Trước khi bắt đầu, tôi cần quyết định một điều quan trọng: tôi nên sử dụng thế giới xung quanh người chơi để mô phỏng chuyển động hay thực sự di chuyển người chơi và theo dõi anh ta với các tính năng camera của công cụ trò chơi?

Cả hai phương pháp đều có những điểm mạnh và nhược điểm khác nhau, vì vậy tôi không biết cách nào được coi là tốt nhất. Ví dụ, điều gì sẽ giúp dễ dàng thêm sức mạnh trên đường đi và có một nền hoạt hình đẹp?

Cảm ơn!


2
Di chuyển máy ảnh.
Jonathan Dickinson

1
Trừ khi bạn có một lý do cụ thể cho việc không muốn sử dụng máy ảnh (đã được viết cho bạn), bạn nên di chuyển máy nghe nhạc và máy ảnh. Thêm "tăng sức mạnh" cũng không nên bị ảnh hưởng.
Christopher Horenstein

Câu trả lời:


9

Di chuyển camera (gắn liền với máy nghe nhạc của bạn). Tôi sẽ tưởng tượng rằng thế giới của bạn có nhiều đối tượng như kẻ thù. Nếu bạn đã đi với việc di chuyển thế giới, bạn sẽ phải lặp qua tất cả các đối tượng này để cập nhật vị trí của họ mỗi khi thế giới di chuyển.

Nếu bạn di chuyển trình phát và gắn máy ảnh vào trình phát thì sẽ sử dụng tài nguyên tối thiểu. Trò chơi sẽ đến giai đoạn kết xuất, lặp lại mọi thứ một lần giống như mọi khung hình và vẽ chúng ở vị trí - camera.poseition. Vị trí máy ảnh sẽ luôn bằng vị trí người chơi của bạn trong trường hợp này.


Tất nhiên, nếu các đối tượng là kẻ thù, bạn sẽ không phải vòng qua chúng, chỉ cần thêm chuyển động của thế giới vào chúng trong phương thức cập nhật của chúng.
SirYakalot

1
+1. Sử dụng camera.setChaseEntity(player);để đạt được điều này.
MartinTeeVarga

6

Tôi luôn di chuyển máy ảnh và muốn giới thiệu nó - có nhiều lý do tại sao tôi thích điều này, nhưng điều quan trọng nhất có lẽ là giải quyết vấn đề này:

  1. Nếu bạn di chuyển máy ảnh và trình phát, đó chỉ là hai thực thể cần được cập nhật để cuộn màn hình.

  2. Nếu bạn di chuyển toàn bộ thế giới bất cứ khi nào màn hình cần cuộn, nó sẽ bao gồm một số lượng lớn các thực thể chưa biết và có thể sẽ phải được cập nhật.


Tôi đồng ý, nhưng tôi sẽ thêm rằng chỉ cần thêm một dòng + = 'ing phong trào thế giới vào lớp kẻ thù sẽ khá tầm thường.
SirYakalot

@AsherEinhorn Tôi cho rằng bạn đang nói về một kịch bản, chẳng hạn như biểu đồ cảnh trong đó mỗi nút chia sẻ các biến đổi của cha mẹ và chỉ cần di chuyển nút gốc (tức là "thế giới") sẽ tự động dịch mọi thứ khác? Bởi vì trong mọi trường hợp khác, di chuyển thế giới ngụ ý di chuyển mọi thứ trên thế giới - đó là điểm của bài viết của tôi.
David Gouveia

tốt nếu phong trào của thế giới tỷ lệ nghịch với người chơi. tức là - bạn di chuyển về phía trước, thế giới di chuyển trở lại, sau đó bạn có thể chỉ - = chuyển động của người chơi đến tất cả các trò chơi. Tôi đồng ý với bạn Tôi chỉ nói rằng có những cách tầm thường để khiến cả hai làm việc.
SirYakalot

4

Nó thực sự khá tầm thường, nó không thực sự tạo ra sự khác biệt so với những điều bạn đã mô tả.

Hoặc bạn di chuyển nền qua máy ảnh và trình phát, hoặc bạn di chuyển trình phát và máy ảnh với anh ta. Tôi cho rằng có một điều ít phải làm nếu bạn chỉ di chuyển nền.

Mặc dù tôi cho rằng nếu bạn di chuyển nền, bạn sẽ phải phụ huynh bất kỳ kẻ nhặt đồ và kẻ thù nào, điều đó một lần nữa, là chuyện nhỏ nhưng đó là điều cần suy nghĩ.

Cá nhân tôi sẽ di chuyển người chơi bởi vì tôi chỉ muốn mọi thứ được thực hiện theo cách thực tế hơn.


0

Các câu trả lời khác là tốt, nhưng tôi muốn thêm một vài điểm tốt hơn, hy vọng sẽ giúp được ai đó cố gắng đưa ra quyết định tương tự cho một dự án khác.

Di chuyển người chơi:

  • Thật đơn giản, mọi thứ khác đều tĩnh (ish), vì vậy theo cách hiểu đơn giản, điều duy nhất bạn cần làm để di chuyển người chơi là player.x += 5; (mã giả).
  • Nó "Nhấp tốt hơn" cho hầu hết mọi người. Khi bạn chơi một trò chơi, bạn luôn nghĩ rằng người chơi di chuyển, không phải là cách khác. Vì vậy, dễ dàng hơn khi nghĩ về nó như là "Người chơi nên di chuyển chứ không phải thế giới", điều này có thể giúp ai đó dễ dàng tổ chức nó trong đầu hơn.
  • Dễ dàng theo dõi vị trí của người chơi (vị trí của nó cũng là tọa độ của nó trên bản đồ)

Di chuyển thế giới:

  • Nếu trò chơi của bạn đủ lớn, bạn không phải lo lắng về việc tràn / tràn, bằng cách di chuyển quá xa khỏi trung tâm của thế giới, vì vị trí của người chơi luôn ở rất gần 0 .
  • Tương tự như trên, nếu bạn lộn xộn với các tính toán 3D, bạn không phải lo lắng về kết quả không chính xác với các điểm nổi, bởi vì mọi thứ bạn nhìn thấy trên màn hình nên khá gần với 0 .
  • Nếu được thực hiện chính xác, bạn có thể tạo ra một thế giới "vô tận".
  • Phải theo dõi thủ công người chơi, vị trí của người chơi sẽ luôn là một giá trị nhỏ, biểu thị vị trí của người chơi trên màn hình (loại), để biết người chơi ở phía trên bên trái của bản đồ hay phía dưới bên phải, bạn phải theo dõi điều đó theo một cách nào đó.

Vào cuối ngày, nó phụ thuộc vào dự án. Nếu ai đó đang tạo một bản sao Mario gốc, việc di chuyển thế giới có thể phức tạp, trong khi di chuyển người chơi không thực sự tạo ra nhiều vấn đề. Muốn tạo ra một trò chơi thế giới mở khổng lồ, thay vào đó, tốt hơn là nên chuyển thế giới.

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.