Tôi có một cơ chế trò chơi amip amip. Bất kỳ ý tưởng về cách thực hiện nó?


19

Bên ngoài một bản sao tetris , một game bắn súng từ trên xuống 2D nhảm nhí và một số thứ lộn xộn với những thứ như Unity và Flixel, tôi nhận ra rằng tôi vẫn chưa hoàn thành một trò chơi đơn , đánh bóng, đánh chuông. Tôi muốn thay đổi điều này, và tôi có một ý tưởng cho dự án tiếp theo của mình.

Ý tưởng là bạn là một amip. Amip có những lõi giống như mắt này (hoặc một cái gì đó tương tự, tôi không biết về sinh học) và bạn có hai trong số chúng. Bạn điều khiển cái này với WASDcái kia với IJKL. Phải có một bán kính không đổi của các công cụ xung quanh mỗi lõi:

2m1

Và diện tích của amip phải không đổi. Vì vậy, nếu bạn di chuyển lõi theo một hướng, bạn sẽ tăng diện tích của amip, nhưng mức tăng đó được bù lại bằng cách giảm ở một nơi khác:

2meba2

Aaaaaand Tôi muốn thực hiện một cơ chế mơ hồ . Bạn tiếp thu mọi thứ bằng cách nhấn chìm chúng, giống như một ông chủ. Thậm chí có thể là một lõi phụ, hoặc một cây kim bật ra cho bạn và khiến tất cả những thứ bên trong của bạn bắt đầu tuôn ra:

2m3

Nhưng đây là vấn đề: tôi không biết làm thế nào để làm điều này. Tuy nhiên, tôi muốn một số ý tưởng về cách thực hiện nó. Tôi có nên khám phá các thư viện vật lý như Box2D không? Hoặc có thể một cái gì đó liên quan đến vật lý chất lỏng? Bất kì sự trợ giúp nào đều được đánh giá cao.

PS Hãy ăn cắp ý tưởng này. Tôi có rất nhiều ý tưởng. Nếu bạn làm như vậy, xin vui lòng cho tôi biết bạn đã làm nó như thế nào để tôi có thể tự mình thử nó.


3
Các dạng danh từ và động từ lần lượt là sự xâm lấnxâm lấn , FYI. (Tôi đã làm sinh học.) Bức ảnh đẹp.
Kỹ sư

2
bạn lấy tờ giấy đen ngọt ngào đó ở đâu?
brendan

5
@enamendan: Nếu bạn hoán đổi màu đen với màu trắng, màu đỏ với màu xanh và màu trắng với màu đen, nó sẽ trở nên rõ ràng hơn rất nhiều khi anh ta nhận được "tờ giấy đen" này. ;)
hiệp sĩ666

1
Các bạn quá thông minh: D
Jason Tu

Câu trả lời:


16

Ngoài đỉnh đầu của tôi, mệnh đề đưa ra cho tôi là bạn muốn diện tích không đổi. Điều đó gây cho tôi sự đau đớn trong tất cả những điều này, vì vậy hãy thử và đưa ra một giải pháp dễ dàng cho điều đó.

Lấy một đoạn dây và buộc các đầu lại với nhau để tạo thành một vòng tròn. Tôi có thể sai, nhưng trực giác của tôi nói rằng bên trong chuỗi đó có diện tích không đổi, hoặc sẽ hành động rất nhiều như ranh giới amip của bạn.

Vì vậy, tôi sẽ nói: thực hiện chuỗi. ;) Hầu hết các thư viện vật lý có thể thực hiện các lò xo (trong Box2D, nó trông giống như khớp khoảng cách) và cách dễ nhất để tạo một chuỗi là kết nối nhiều chuỗi với nhau. Tham gia cái cuối cùng cho đến cái đầu tiên để tạo một vòng lặp. Hãy chắc chắn rằng các lò xo trong chuỗi có hằng số lò xo đủ cao để không bị giãn ra - bạn muốn chúng khá cứng và di chuyển đồng đều, không mở rộng ra.

Tiếp theo, tạo lực để tác động lên chuỗi. Một cách tầm thường, hai lõi / mắt / điểm kiểm soát của bạn tạo ra lực lên các điểm tạo nên chuỗi. Làm cho lực rơi ra với hàm vuông nghịch đảo:

float forceOnPoint(point, ball)
{
  float d = distance(point, ball);
  return K / (d*d);
}

Và làm cho hướng của lực trực tiếp ra khỏi mắt / bóng điều khiển, giống như một lực đẩy phát ra từ quả bóng. Tinh chỉnh K để kiểm soát sức mạnh của lực. Hãy chắc chắn rằng K không quá cao - bạn không muốn nó bị lực đẩy ra một cách ồ ạt, chỉ cần để nó tránh xa những quả bóng. Để lại nhiều chùng trong chuỗi của bạn.

Chỉ với hai thứ đó, bạn có thể sẽ có hình dạng khá đồng đều, vì vậy tôi cũng đề nghị bạn tạo ra một số lực yếu hơn xung quanh trong 'súp' xung quanh để thay đổi hình dạng của amip. Bạn có thể tạo những vị trí ngẫu nhiên này, thay đổi lực thường xuyên (bạn có thể biến nó thành một hàm hình sin cho các chuyển động đẹp) và làm cho chúng hoạt động giống như các quả bóng.

Vagination (fnarr): đây là một trong những khó khăn. Bạn khiến nó bao bọc một đối tượng bằng cách kiểm tra xem hai điểm không liền kề trên chuỗi có đủ gần không, và nếu vậy bạn cần phải:

Đo khoảng cách giữa các điểm trên chuỗi. Đếm số lượng phần lò xo. Tìm đường dẫn 'ngắn hơn' từ A đến B.

Phá vỡ chuỗi và nối lại với hai điểm liền kề. Nói cách khác, trực tiếp nối điểm A đến điểm B và loại bỏ tất cả những thứ nằm giữa.

Chèn lại số điểm còn thiếu (cộng với bất kỳ điểm thưởng nào nếu bạn muốn mở rộng kích thước bằng cách ăn thứ gì đó) vào chuỗi ở phía bên kia - nghĩa là cạnh từ B đến A. Nếu bạn chèn chúng dọc theo chiều dài và làm cho chúng ngắn hơn khoảng cách mong muốn giữa các điểm, bạn sẽ có được hiệu ứng lò xo đẹp.

Tôi nghĩ rằng nó bao gồm tất cả mọi thứ. Nhân tiện: ý tưởng nghe tuyệt vời.


18
FWIW, trong khi tôi thích toàn bộ giải pháp này, trực giác của bạn về phần bên trong của chuỗi có diện tích không đổi sai - vòng tròn có diện tích tối đa ngoài bất kỳ hình dạng nào với chuỗi liên kết đó làm ranh giới của nó. Cách dễ nhất để thấy rằng nó thay đổi là tưởng tượng 'squishing' chuỗi bằng cách kéo hai đầu taut; sau đó hình dạng bạn có được (cho dù hình chữ nhật hoặc hình elip hoặc những gì bạn có) không bao giờ có thể rộng hơn một nửa chu vi, nhưng chiều cao của nó co lại bằng 0 nên diện tích (được giới hạn bởi chiều rộng * chiều cao) cũng co lại bằng không.
Steven Stadnicki

1
Tôi nghĩ bạn có nghĩa là "... để tạo ra một chuỗi là kết nối nhiều lò xo với nhau."
Richard Marskell - Drackir

8

Để bạn mô phỏng endocytosis (quá trình tế bào ăn lõi bên ngoài), mỗi lõi, cả bên trong và bên ngoài amip, sẽ đẩy lùi ranh giới của amip. Các lõi bên trong amip sẽ có tác dụng đẩy mạnh vừa phải, trong khi các lõi bên ngoài sẽ có tác dụng đẩy nhỏ. Điều này được minh họa dưới đây.

nhập mô tả hình ảnh ở đây

Khi lõi bên ngoài (màu đỏ) tiếp cận amip, trường lực đẩy của nó sẽ tạo ra một vết lõm tròn trong amip. Cuối cùng, hai bên (màu xanh lá cây nổi bật) sẽ chạm vào nhau. Khi một vụ va chạm như thế này được phát hiện, vết lõm tròn sẽ bị xóa và bất cứ thứ gì bên trong nó được tiêu thụ.

Điều này bắt chước quá trình endocytosis khá tốt, và cho hiệu ứng hình ảnh đẹp.

Đối với việc mô phỏng ranh giới của amip, tôi thích ý tưởng của Matt Kemp về việc sử dụng một số lượng rất lớn các lò xo được kết nối. Điều này không duy trì một diện tích không đổi, nhưng chu vi không đổi. Trong cuộc sống thực, nước có thể chảy tự do vào và ra khỏi màng tế bào (ranh giới amip), vì vậy các tế bào không có thể tích không đổi.


Một số ý tưởng khác để làm cho trò chơi thực tế sẽ có thể sửa đổi hàm lượng muối của các tế bào bằng cách nào đó. Khi nồng độ muối của bên trong và bên ngoài tế bào không khớp nhau, nước sẽ chảy qua màng tế bào về phía nơi có hàm lượng muối cao hơn trong một quá trình gọi là thẩm thấu. Nếu amip có hàm lượng muối cao, nó sẽ có thể tích lớn hơn, nhưng chu vi sẽ không thay đổi. Trong trò chơi, điều này có thể được mô phỏng bằng cách cho các lõi bên trong có hiệu ứng đẩy cao hơn nếu hàm lượng muối cao hơn.

Vì hàm lượng muối cao hơn sẽ mang lại hiệu quả chống đẩy cao hơn, nên nó có ưu điểm là làm cho amip dễ kiểm soát hơn. Có hàm lượng muối thấp hơn sẽ khiến amip bị uốn cong và uốn cong dưới tác động của môi trường dễ dàng hơn. Điều này có lợi thế là có thể ăn các lõi khác dễ dàng hơn, vì amip sẽ có thể bao quanh nó dễ dàng hơn.


3

Để làm hiệu ứng đồ họa, rất có thể bạn sẽ sử dụng các siêu dữ liệu (có rất nhiều hướng dẫn trực tuyến cho họ)


2

Tôi biết một trò chơi giáo dục có tên CellCraft (mặc dù không liên quan đến Minecraft) liên quan đến việc kiểm soát sinh vật giống như tế bào có các chuyển động rất giống với những gì bạn cần. Trò chơi này miễn phí và có lẽ quan trọng hơn là họ đã tuyên bố rõ ràng trên trang của mình rằng họ có ý định cung cấp mã nguồn miễn phí và nó được tạo trong ActionScript 3 và là một trò chơi dựa trên flash.

http://www.cellcraftgame.com/Home.html


1

Cách tôi sẽ làm về điều này là mô phỏng một chuỗi vòng tương tự như cách Matt Kemp đề xuất, nhưng lấp đầy bên trong bằng các hạt đẩy nhau và chuỗi. bằng cách này bạn sẽ đảm bảo bảo tồn khối lượng gần đúng. Bạn sẽ phải cẩn thận để đảm bảo các lực lớn không đánh bật các hạt bên ngoài.

Tra cứu "thủy động lực học hạt mịn" để mô phỏng các hạt và "tích hợp verlet" để mô phỏng chúng (và chuỗi). Verlet là một kỹ thuật dựa trên vị trí nên rất đơn giản và ổn định.

Để giữ cho mọi thứ hiệu quả, tôi sẽ đề xuất một hệ thống "phân vùng không gian lưới thống nhất". Một lần nữa, dễ dàng để thực hiện và tăng tốc tuyệt vời.

Bạn cũng có thể sử dụng siêu dữ liệu để trực quan hóa đối tượng thay vì sử dụng chuỗi. Nhưng sau đó, bạn có vấn đề là các hạt có thể tách thành các khối riêng biệt. Tra cứu "lực Van der Waals" để cân bằng lực hút / lực đẩy dẫn đến vón cục.

Một cách tiếp cận khác là cung cấp một lực 'thổi phồng' nhỏ cho các hạt chuỗi theo hướng thông thường 'hướng ra ngoài' của chúng. Điều này sẽ mô phỏng một loại áp lực nội bộ. Kết quả là vòng lặp sẽ cố gắng duy trì hình dạng vòng tròn. Đó là những gì tôi đã sử dụng cho việc này .

Hy vọng nó giúp.

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.