ฉันมีช่างเกม“ อะมีบา” มีความคิดเกี่ยวกับวิธีการใช้งานหรือไม่


19

นอกเหนือจากtetris clone , ปืนจากบนลงล่าง 2D เส็งเคร็งและบางสิ่งที่ยุ่งเหยิงไปกับสิ่งต่าง ๆ เช่น Unity และ Flixel ฉันรู้ว่าฉันยังไม่ได้ทำเกมเดี่ยวที่ขัดเงาระฆังและเสียงนกหวีด ฉันต้องการเปลี่ยนสิ่งนี้และฉันมีความคิดสำหรับโครงการต่อไปของฉัน

ความคิดคือคุณเป็นอะมีบา อะมีบามีแกนคล้ายตาเหล่านี้ (หรืออะไรทำนองนั้นฉันไม่รู้ชีววิทยา) และคุณมีสองส่วน คุณสามารถควบคุมหนึ่งWASDและอื่น ๆ IJKLที่มี จะต้องมีรัศมีของสิ่งต่างๆ รอบ ๆ แต่ละแกน:

2meba1

และพื้นที่ของอะมีบาจะต้องคงที่ ดังนั้นหากคุณย้ายแกนกลางในทิศทางเดียวคุณจะเพิ่มพื้นที่ของอะมีบา แต่การเพิ่มขึ้นนั้นถูกชดเชยโดยการลดลงที่อื่น:

2meba2

เอาเป็นว่าฉันอยากจะใช้ช่างตกปลา คุณดูดซับสิ่งต่าง ๆ โดยการกลืนพวกมันเหมือนเจ้านาย อาจเป็นแกนเสริมหรือเข็มที่โผล่ออกมาและทำให้สิ่งของภายในทั้งหมดของคุณเริ่มพุ่งออกมา:

2meba3

แต่นี่คือปัญหา: ฉันไม่รู้จะทำอย่างไร อย่างไรก็ตามฉันต้องการความคิดบางอย่างเกี่ยวกับวิธีการใช้งาน ฉันควรสำรวจห้องสมุดฟิสิกส์เช่น Box2D หรือไม่ หรืออาจเป็นสิ่งที่เกี่ยวข้องกับฟิสิกส์ของเหลว? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

PS รู้สึกฟรีที่จะขโมยความคิดนี้ ฉันมีความคิดมากมาย ถ้าคุณทำโปรดบอกฉันว่าคุณทำมันได้อย่างไรเพื่อที่ฉันจะได้ลองเอง


3
Noun- และกริยาแบบฟอร์มinvaginationและinvaginateตามลำดับ FYI (ฉันทำชีววิทยา) รูปสวย
วิศวกร

2
คุณจะได้รับกระดาษสีดำอันแสนหวานที่ไหน
เบรนแดน

5
@brendan: ถ้าคุณสลับสีดำกับสีขาว, สีแดงกับสีน้ำเงินและสีขาวกับสีดำมันจะกลายเป็นชัดเจนมากขึ้นที่เขาได้รับ "กระดาษสีดำ" นี้ ;)
knight666

1
พวกคุณฉลาดเกินไป: D
Jason Tu

คำตอบ:


16

ส่วนบนของหัวประโยคที่ยื่นออกมาให้ฉันคือคุณต้องการให้พื้นที่คงที่ นั่นทำให้ฉันเป็นความเจ็บปวดในเรื่องทั้งหมดดังนั้นลองทำด้วยวิธีง่ายๆ

ใช้ชิ้นส่วนของสตริงและผูกปลายเข้าด้วยกันเพื่อสร้างวงกลม ฉันอาจจะผิด แต่ปรีชาญาณของฉันบอกว่าภายในของสายนั้นมีพื้นที่คงที่หรือจะทำอะไรที่น่ากลัวเหมือนเขตอะมีบาของคุณ

ดังนั้นฉันจะพูดว่า: ใช้สตริง ;) ห้องสมุดฟิสิกส์ส่วนใหญ่สามารถทำสปริง (ใน Box2D สิ่งนี้ดูเหมือนว่าระยะทางต่อ) และวิธีที่ง่ายที่สุดในการสร้างสตริงคือการเชื่อมต่อสตริงจำนวนมากเข้าด้วยกัน เข้าร่วมคนสุดท้ายจนถึงคนแรกเพื่อสร้างวง ตรวจสอบให้แน่ใจว่าสปริงในสายมีค่าคงที่ของสปริงที่สูงพอที่จะไม่ยืดออก - คุณต้องการให้พวกมันแข็งและเคลื่อนที่ไปพร้อม ๆ กันไม่ขยายออกไป

จากนั้นสร้างแรงที่กระทำต่อสตริง จุดสำคัญสองคอร์ / ตา / จุดควบคุมของคุณสร้างแรงไปยังจุดที่ประกอบเป็นสตริง ทำให้แรงตกกระทบด้วยฟังก์ชันสแควร์อินเวอร์ส:

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

และทำให้ทิศทางของแรงโดยตรงจากการควบคุมตา / ลูกเช่นแรงขับไล่ที่เล็ดลอดออกมาจากลูก Tweak K เพื่อควบคุมความแข็งแกร่งของกำลัง ตรวจสอบให้แน่ใจว่า K ไม่สูงเกินไป - คุณไม่ต้องการให้มันถูกผลักออกมาอย่างมหาศาลด้วยแรงเพียงแค่ทำให้มันห่างจากลูกบอล ปล่อยให้หย่อนหย่อนลงในสายของคุณ

มีเพียงสองชิ้นเท่านั้นที่คุณจะได้รูปร่างที่ค่อนข้างสม่ำเสมอดังนั้นฉันขอแนะนำให้คุณสร้างกองกำลังที่อ่อนแอกว่าใน 'ซุป' รอบข้างเพื่อเปลี่ยนรูปร่างของอะมีบา คุณสามารถสร้างสถานที่แบบสุ่มเหล่านี้เปลี่ยนพลังของพวกเขาเป็นประจำ (คุณสามารถทำให้มันเป็นฟังก์ชั่นไซน์สำหรับการเคลื่อนไหวที่ดี) และทำให้พวกมันทำงานในลักษณะเดียวกับลูกบอล

ช่องคลอด (fnarr): นี่คือสิ่งที่ยาก คุณทำให้มันห่อหุ้มวัตถุโดยการตรวจสอบเพื่อดูว่าสองจุดที่ไม่ติดกันบนสายอักขระมีการจัดการเพื่อเข้าใกล้พอและถ้าคุณต้องการ:

วัดระยะห่างระหว่างจุดบนสตริง นับจำนวนส่วนของสปริง ค้นหาเส้นทาง 'ย่อ' จาก A ถึง B

แบ่งสตริงและเข้าร่วมอีกครั้งด้วยจุดสองจุดที่อยู่ติดกัน กล่าวอีกนัยหนึ่งให้เข้าร่วมจุด A โดยตรงเพื่อจุด B แล้วละทิ้งทุกสิ่งที่อยู่ระหว่าง

แทรกจำนวนคะแนนที่หายไปอีกครั้ง (รวมถึงคะแนนโบนัสใด ๆ หากคุณต้องการขยายขนาดโดยการกินบางสิ่ง) ลงในสายอักขระที่อยู่อีกด้านหนึ่งนั่นคือด้านจาก B ถึง A หากคุณแทรกพวกเขาตามความยาวเท่ากันและ ทำให้สั้นกว่าระยะห่างที่ต้องการระหว่างจุดคุณควรได้เอฟเฟกต์สปริงที่ดี

ฉันคิดว่ามันครอบคลุมทุกอย่าง โดยวิธีการ: ความคิดฟังดูน่ากลัว


18
FWIW ในขณะที่ฉันชอบวิธีนี้ในทั้งสัญชาตญาณของคุณเกี่ยวกับการตกแต่งภายในของสตริงที่มีพื้นที่อย่างต่อเนื่องเป็นผิด - วงกลมมีพื้นที่สูงสุดออกจากรูปร่างใด ๆ กับว่าสตริงผูกกันเป็นเขตแดนของตน วิธีที่ง่ายที่สุดที่จะเห็นว่ามันแตกต่างกันคือการจินตนาการ 'squishing' สายโดยการดึงปลายทั้งสองตึง จากนั้นรูปร่างที่คุณได้รับ (ไม่ว่าจะเป็นรูปสี่เหลี่ยมผืนผ้าหรือวงรีหรือสิ่งที่มีคุณ) จะไม่มีทางกว้างเกินกว่าครึ่งหนึ่งของขอบเขตได้ แต่ความสูงของมันจะลดลงเป็นศูนย์ดังนั้นพื้นที่ (ซึ่งล้อมรอบด้วยความกว้าง * สูง)
Steven Stadnicki

1
ฉันคิดว่าคุณหมายถึง "... ในการสร้างสตริงคือการเชื่อมต่อสปริงจำนวนมากเข้าด้วยกัน"
Richard Marskell - Drackir

8

เพื่อให้คุณจำลอง endocytosis (กระบวนการของเซลล์ที่กินคอร์ภายนอก) แต่ละแกนทั้งในและนอกอะมีบาจะขับไล่ขอบเขตของอะมีบา แกนภายในของอะมีบานั้นจะมีความน่ารังเกียจในระดับปานกลางในขณะที่ด้านนอกจะมีผลที่น่ารังเกียจเล็กน้อย นี่คือภาพประกอบด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ในขณะที่แกนกลางภายนอก (สีแดง) เข้าใกล้อะมีบามันเป็นสนามที่น่ารังเกียจจะสร้างการเยื้องเป็นวงกลมในอะมีบา ในที่สุดทั้งสองด้าน (สีเขียวที่ไฮไลต์) จะสัมผัสกัน เมื่อตรวจพบการชนเช่นนี้การเยื้องแบบวงกลมจะถูกลบและสิ่งที่อยู่ภายในจะถูกลบออก

นี่เป็นการเลียนแบบกระบวนการสร้างเอนโดโทซิสค่อนข้างดีและให้เอฟเฟกต์ภาพที่ดี

สำหรับการจำลองขอบเขตของอะมีบาฉันชอบความคิดของ Matt Kemp ในการใช้สปริงที่เชื่อมต่อกันจำนวนมาก เรื่องนี้ไม่ได้รักษาพื้นที่คงที่ แต่ปริมณฑลคงที่ ในชีวิตจริงน้ำสามารถไหลเข้าและออกอย่างอิสระจากเยื่อหุ้มเซลล์ (เขตอะมีบา) ดังนั้นเซลล์ไม่มีปริมาตรคงที่


ความคิดอื่นที่ทำให้เกมสมจริงจะสามารถแก้ไขเนื้อหาเกลือของเซลล์ได้ เมื่อความเข้มข้นของเกลือทั้งภายในและภายนอกของเซลล์ไม่ตรงกันน้ำจะไหลผ่านเยื่อหุ้มเซลล์ไปยังที่ที่มีปริมาณเกลือสูงกว่าในกระบวนการที่เรียกว่าออสโมซิส หากอะมีบามีเกลือสูงก็จะมีปริมาตรใหญ่กว่า แต่ปริมณฑลจะไม่เปลี่ยนแปลง ในเกมนี้สามารถจำลองได้โดยให้แกนภายในมีผลที่น่ารังเกียจมากขึ้นหากปริมาณเกลือสูงขึ้น

เนื่องจากปริมาณเกลือที่สูงขึ้นจะทำให้แกนมีผลน่ารังเกียจมากขึ้นจึงมีข้อได้เปรียบในการทำให้อะมีบาควบคุมได้ง่ายขึ้น การมีปริมาณเกลือต่ำกว่าจะทำให้อะมีบานั้นงอและโค้งงอภายใต้อิทธิพลของสภาพแวดล้อมได้ง่ายขึ้น นี่เป็นข้อดีของความสามารถในการกินคอร์อื่น ๆ ได้ง่ายขึ้นเนื่องจากอะมีบาจะสามารถล้อมรอบได้ง่ายขึ้น


3

ดีที่จะทำเอฟเฟกต์กราฟิกที่คุณมักจะใช้กับ metaballs (มีบทเรียนมากมายสำหรับพวกเขาออนไลน์)


2

ฉันรู้เกมการศึกษาที่เรียกว่า CellCraft (ไม่เกี่ยวข้องกับ Minecraft เลย) ซึ่งเกี่ยวข้องกับการควบคุมสิ่งมีชีวิตที่เหมือนเซลล์ที่มีการเคลื่อนไหวคล้ายกับสิ่งที่คุณต้องการ เกมดังกล่าวฟรีและอาจสำคัญกว่านั้นคือพวกเขาระบุไว้ในเว็บไซต์อย่างชัดเจนว่าพวกเขาตั้งใจที่จะทำให้ซอร์สโค้ดพร้อมใช้งานฟรีและสร้างใน ActionScript 3 และเป็นเกมแฟลช

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


1

วิธีที่ฉันจะทำเกี่ยวกับเรื่องนี้คือการจำลองวงสตริงคล้ายกับวิธีที่ Matt Kemp แนะนำ แต่เติมอนุภาคภายในที่ขับไล่กันและกันและสายอักขระ ด้วยวิธีนี้คุณจะมั่นใจได้ถึงการอนุรักษ์ปริมาณโดยประมาณ คุณจะต้องดูแลเพื่อให้แน่ใจว่ากองกำลังขนาดใหญ่ไม่ชนกับอนุภาคภายนอก

เงยหน้าขึ้นมอง "hydrodynamics อนุภาคที่ราบเรียบ" เพื่อจำลองอนุภาคและ "การรวม verlet" เพื่อจำลองพวกมัน (และสตริง) Verlet เป็นเทคนิคตามตำแหน่งดังนั้นง่ายและเสถียรมาก

เพื่อให้สิ่งต่าง ๆ มีประสิทธิภาพฉันขอแนะนำระบบ "การแบ่งพาร์ติชันแบบกริดเชิงพื้นที่" อีกครั้งใช้งานง่ายและเพิ่มความเร็วที่ยอดเยี่ยม

คุณสามารถใช้ metaballs เพื่อให้เห็นภาพวัตถุแทนการใช้สตริง แต่คุณมีปัญหาที่อนุภาคอาจแยกออกเป็นกระจุกแยก ค้นหา "กองกำลังของแวนเดอร์ Waals" เพื่อหาแรงดึงดูด / ความสมดุลที่ผลักไปสู่การจับกันเป็นก้อน

อีกวิธีหนึ่งคือการให้แรงลมกับอนุภาคสตริงเล็ก ๆ ในทิศทางของบรรทัดฐาน 'ภายนอก' นี่จะเป็นการจำลองความกดดันภายใน ผลลัพธ์คือลูปจะพยายามรักษารูปร่างวงกลม นั่นคือสิ่งที่ผมใช้ในการนี้

หวังว่ามันจะช่วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.