ส่วนบนของหัวประโยคที่ยื่นออกมาให้ฉันคือคุณต้องการให้พื้นที่คงที่ นั่นทำให้ฉันเป็นความเจ็บปวดในเรื่องทั้งหมดดังนั้นลองทำด้วยวิธีง่ายๆ
ใช้ชิ้นส่วนของสตริงและผูกปลายเข้าด้วยกันเพื่อสร้างวงกลม ฉันอาจจะผิด แต่ปรีชาญาณของฉันบอกว่าภายในของสายนั้นมีพื้นที่คงที่หรือจะทำอะไรที่น่ากลัวเหมือนเขตอะมีบาของคุณ
ดังนั้นฉันจะพูดว่า: ใช้สตริง ;) ห้องสมุดฟิสิกส์ส่วนใหญ่สามารถทำสปริง (ใน Box2D สิ่งนี้ดูเหมือนว่าระยะทางต่อ) และวิธีที่ง่ายที่สุดในการสร้างสตริงคือการเชื่อมต่อสตริงจำนวนมากเข้าด้วยกัน เข้าร่วมคนสุดท้ายจนถึงคนแรกเพื่อสร้างวง ตรวจสอบให้แน่ใจว่าสปริงในสายมีค่าคงที่ของสปริงที่สูงพอที่จะไม่ยืดออก - คุณต้องการให้พวกมันแข็งและเคลื่อนที่ไปพร้อม ๆ กันไม่ขยายออกไป
จากนั้นสร้างแรงที่กระทำต่อสตริง จุดสำคัญสองคอร์ / ตา / จุดควบคุมของคุณสร้างแรงไปยังจุดที่ประกอบเป็นสตริง ทำให้แรงตกกระทบด้วยฟังก์ชันสแควร์อินเวอร์ส:
float forceOnPoint(point, ball)
{
float d = distance(point, ball);
return K / (d*d);
}
และทำให้ทิศทางของแรงโดยตรงจากการควบคุมตา / ลูกเช่นแรงขับไล่ที่เล็ดลอดออกมาจากลูก Tweak K เพื่อควบคุมความแข็งแกร่งของกำลัง ตรวจสอบให้แน่ใจว่า K ไม่สูงเกินไป - คุณไม่ต้องการให้มันถูกผลักออกมาอย่างมหาศาลด้วยแรงเพียงแค่ทำให้มันห่างจากลูกบอล ปล่อยให้หย่อนหย่อนลงในสายของคุณ
มีเพียงสองชิ้นเท่านั้นที่คุณจะได้รูปร่างที่ค่อนข้างสม่ำเสมอดังนั้นฉันขอแนะนำให้คุณสร้างกองกำลังที่อ่อนแอกว่าใน 'ซุป' รอบข้างเพื่อเปลี่ยนรูปร่างของอะมีบา คุณสามารถสร้างสถานที่แบบสุ่มเหล่านี้เปลี่ยนพลังของพวกเขาเป็นประจำ (คุณสามารถทำให้มันเป็นฟังก์ชั่นไซน์สำหรับการเคลื่อนไหวที่ดี) และทำให้พวกมันทำงานในลักษณะเดียวกับลูกบอล
ช่องคลอด (fnarr): นี่คือสิ่งที่ยาก คุณทำให้มันห่อหุ้มวัตถุโดยการตรวจสอบเพื่อดูว่าสองจุดที่ไม่ติดกันบนสายอักขระมีการจัดการเพื่อเข้าใกล้พอและถ้าคุณต้องการ:
วัดระยะห่างระหว่างจุดบนสตริง นับจำนวนส่วนของสปริง ค้นหาเส้นทาง 'ย่อ' จาก A ถึง B
แบ่งสตริงและเข้าร่วมอีกครั้งด้วยจุดสองจุดที่อยู่ติดกัน กล่าวอีกนัยหนึ่งให้เข้าร่วมจุด A โดยตรงเพื่อจุด B แล้วละทิ้งทุกสิ่งที่อยู่ระหว่าง
แทรกจำนวนคะแนนที่หายไปอีกครั้ง (รวมถึงคะแนนโบนัสใด ๆ หากคุณต้องการขยายขนาดโดยการกินบางสิ่ง) ลงในสายอักขระที่อยู่อีกด้านหนึ่งนั่นคือด้านจาก B ถึง A หากคุณแทรกพวกเขาตามความยาวเท่ากันและ ทำให้สั้นกว่าระยะห่างที่ต้องการระหว่างจุดคุณควรได้เอฟเฟกต์สปริงที่ดี
ฉันคิดว่ามันครอบคลุมทุกอย่าง โดยวิธีการ: ความคิดฟังดูน่ากลัว