การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

3
การแก้ไขการชนกับกองกำลัง
ในเอนจินฟิสิกส์ 2D ของฉันฉันสามารถตรวจจับการชน AABB กับ AABB และแก้ไขพวกมันได้โดยการหาเวกเตอร์การสอดใส่ที่สั้นที่สุดและเพิ่มลงในตำแหน่งของ AABB การทำเช่นนี้จะ "ผลัก" AABB ตัวแรกนอก AABB ตัวที่สอง แต่ไม่ได้เกี่ยวข้องกับการเปลี่ยนแปลงความเร็ว / การเร่งความเร็วเลย ถ้าฉันเพิ่มการเร่งความเร็วด้วยแรงโน้มถ่วงกับการจำลองความเร็วของไดนามิก AABB แรกยังคงเพิ่มขึ้นแม้ว่าจะวางอยู่บน AABB สถิตที่สอง ในที่สุดความเร็วจะใหญ่เกินไปและไม่สามารถตรวจพบการชนกันได้ (ไดนามิก AABB จะตกลงไปในภาพนิ่ง) ฉันพยายามตั้งค่าความเร็วเป็นศูนย์หลังจากการแก้ปัญหา แต่เห็นได้ชัดว่าใช้งานไม่ได้ดีและสร้างแบบจำลองที่ไม่สมจริง ฉันอ่านออนไลน์ที่แก้ไขการชนโดยการทำงานกับตำแหน่งด้วยตนเองหรือความเร็วไม่ถูกต้อง ฉันพยายามใช้กองกำลัง (มวลคือ "hardcoded" 1 สำหรับตอนนี้): void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; } void Body::integrate(float mFrameTime) { velocity += acceleration * …

5
ฉันจะปรับเอ็นจิ้นการชนได้อย่างมีประสิทธิภาพซึ่งคำสั่งนั้นสำคัญและการชนกันแบบมีเงื่อนไขขึ้นอยู่กับกลุ่มวัตถุ?
หากนี่เป็นครั้งแรกของคุณสำหรับคำถามนี้ฉันขอแนะนำให้อ่านส่วนอัปเดตด้านล่างก่อนจากนั้นส่วนนี้ นี่คือการสังเคราะห์ปัญหาแม้ว่า: โดยพื้นฐานแล้วฉันมีระบบตรวจจับการชนและการแก้ปัญหาด้วยระบบแบ่งพาร์ติชันแบบกริดซึ่งการเรียงลำดับการชนและการชนมีความสำคัญ ร่างกายหนึ่งคนในแต่ละครั้งจะต้องเคลื่อนที่จากนั้นตรวจจับการชนแล้วแก้ไขการชน ถ้าฉันย้ายร่างกายทั้งหมดในครั้งเดียวจากนั้นสร้างคู่การชนกันที่เป็นไปได้มันจะเร็วขึ้นอย่างเห็นได้ชัด แต่ตัวแบ่งความละเอียดเนื่องจากการเรียงลำดับของการชนกันไม่ได้รับการเคารพ ถ้าฉันขยับร่างกายหนึ่งครั้งฉันก็ต้องบังคับให้ร่างกายตรวจสอบการชนและมันจะกลายเป็นปัญหา ^ 2 ใส่กลุ่มในการผสมและคุณสามารถจินตนาการได้ว่าทำไมมันถึงช้ามากอย่างรวดเร็วด้วยร่างกายจำนวนมาก อัปเดต:ฉันทำงานอย่างหนักกับสิ่งนี้ แต่ไม่สามารถจัดการเพื่อเพิ่มประสิทธิภาพอะไรได้เลย ฉันประสบความสำเร็จในการนำ "ภาพวาด" ที่อธิบายโดย Will และเปลี่ยนกลุ่มเป็นบิตเซ็ต แต่มันเป็นการเร่งความเร็วที่น้อยมาก ฉันค้นพบปัญหาใหญ่เช่นกัน: เครื่องยนต์ของฉันขึ้นอยู่กับการชนกันของข้อมูล ฉันพยายามที่มีการใช้งานของคนรุ่นชนคู่ที่ไม่ซ้ำกันซึ่งแน่นอนเพิ่มความเร็วในการทุกอย่างด้วยเป็นจำนวนมาก แต่ยากจนชนการสั่งซื้อของ ให้ฉันอธิบาย: ในการออกแบบดั้งเดิมของฉัน (ไม่สร้างคู่) สิ่งนี้เกิดขึ้น: เคลื่อนไหวร่างกายเดียว หลังจากที่มันเคลื่อนไหวแล้วมันจะรีเฟรชเซลล์และทำให้ร่างกายได้รับการชนกัน หากมันทับร่างกายที่ต้องแก้ไขให้แก้ไขการชนกัน นี่หมายความว่าหากร่างกายเคลื่อนไหวและชนกับกำแพง (หรือร่างกายอื่น ๆ ) เฉพาะร่างกายที่เคลื่อนไหวเท่านั้นที่จะแก้ไขการชนและร่างกายอื่น ๆ จะไม่ได้รับผลกระทบ นี่คือความปรารถนาที่พฤติกรรมของฉัน ผมเข้าใจว่ามันไม่ธรรมดาสำหรับเครื่องยนต์ฟิสิกส์ แต่มันก็มีประโยชน์มากสำหรับสไตล์ย้อนยุคเกม ในการออกแบบกริดปกติ (สร้างคู่ที่ไม่ซ้ำกัน) สิ่งนี้เกิดขึ้น: ทุกสิ่งเคลื่อนไหว หลังจากย้ายวัตถุทั้งหมดแล้วให้รีเฟรชเซลล์ทั้งหมด สร้างคู่การชนกันที่ไม่ซ้ำกัน สำหรับแต่ละคู่จัดการการตรวจจับการชนและความละเอียด ในกรณีนี้การเคลื่อนที่พร้อมกันอาจส่งผลให้มีสองวัตถุซ้อนทับกันและพวกมันจะแก้ไขในเวลาเดียวกัน - สิ่งนี้ทำให้ร่างกาย "ผลักกันอีกรอบ" …

3
วิธีที่เร็วที่สุดในการเรนเดอร์ด้วย AA ความหนาต่างกันใน DirectX
ดังนั้นฉันจึงทำการพัฒนา DirectX บางอย่างโดยใช้ SharpDX ภายใต้. NET เพื่อให้แน่นอน (แต่โซลูชัน DirectX / C ++ API สามารถใช้ได้) ฉันกำลังมองหาวิธีที่เร็วที่สุดในการเรนเดอร์เส้นในการฉายฉากมุมฉาก (เช่นการจำลองการวาดเส้นสองมิติสำหรับแอปเชิงวิทยาศาสตร์) โดยใช้ DirectX สกรีนช็อตของแปลงต่าง ๆ ที่ฉันพยายามจะทำดังนี้ มันไม่ใช่เรื่องแปลกสำหรับการแปลงประเภทนี้มีเส้นที่มีหลายล้านส่วนของความหนาของตัวแปรที่มีหรือไม่มีการลดรอยหยักต่อบรรทัด (หรือเปิด / ปิด AA แบบเต็มหน้าจอ) ฉันจำเป็นต้องอัปเดตจุดยอดสำหรับสายบ่อยมาก (เช่น 20 ครั้ง / วินาที) และถ่ายให้ GPU มากที่สุดเท่าที่จะทำได้ จนถึงตอนนี้ฉันได้ลอง: การแสดงผลซอฟต์แวร์เช่น GDI + จริง ๆ แล้วประสิทธิภาพไม่ดี แต่เห็นได้ชัดว่าหนักบน CPU Direct2D API - ช้ากว่า GDI …
14 2d  directx  shaders 

8
วิธีสร้าง Spritefonts สำหรับ monogame
ฉันแค่ต้องการแสดงข้อความบนหน้าจอโดยใช้: monogame 3.0 MS Visual Studio 2010 C # Express ใน XNA คุณสามารถเพิ่มแบบอักษรให้กับไปป์ไลน์เนื้อหาได้ค่อนข้างง่าย แต่ดูเหมือนจะไม่เป็นเช่นนั้นใน monogame กำลังโหลดไฟล์ TTF ที่ใช้Content<SpriteFont>.Load()ไม่ทำงาน มีวิธีใดในการสร้างหรือดาวน์โหลดไฟล์ * .spritefont หรือไฟล์ * .xnb ที่มีข้อมูลตัวอักษร (โดยไม่ต้องติดตั้ง XNA)
14 xna  monogame 

3
ฉันจะย่อขนาดศิลปะพิกเซลได้อย่างไร
มีความอุดมสมบูรณ์ของขั้นตอนวิธีการที่จะไต่ขึ้นศิลปะพิกเซล (ฉันชอบhqxส่วนตัว.) แต่จะมีผู้ใดขั้นตอนวิธีการที่โดดเด่นขนาดมันลง ? เกมของฉันออกแบบมาให้ทำงานด้วยความละเอียด1280x720แต่ถ้าเล่นด้วยความละเอียดต่ำกว่าฉันยังต้องการให้มันดูดี การอภิปรายพิกเซลของศิลปะส่วนใหญ่อยู่ที่รอบ ๆ320x200หรือ640x480ยกระดับเพื่อใช้ในคอนโซลอีมูเลเตอร์ แต่ฉันสงสัยว่าเกม 2D ที่ทันสมัยเช่นMonkey Island Remakeสามารถดูดีได้อย่างไรเมื่อความละเอียดต่ำลง? แน่นอนว่าไม่สนใจตัวเลือกในการมีเนื้อหาหลายเวอร์ชัน (เช่นการทำแผนที่ )

5
หลีกเลี่ยงถ้างบใน DirectX 10 shaders หรือไม่
ฉันเคยได้ยินว่าถ้างบควรหลีกเลี่ยงใน shaders เพราะทั้งสองส่วนของงบจะดำเนินการและกว่าจะผิดพลาดจะลดลง (ซึ่งเป็นอันตรายต่อประสิทธิภาพการทำงาน) ยังคงเป็นปัญหาใน DirectX 10 หรือไม่ มีคนบอกฉันว่ามีเพียงสาขาที่ถูกต้องเท่านั้นที่จะถูกประหาร สำหรับภาพประกอบฉันมีรหัส: float y1 = 5; float y2 = 6; float b1 = 2; float b2 = 3; if(x>0.5){ x = 10 * y1 + b1; }else{ x = 10 * y2 + b2; } มีวิธีอื่นที่จะทำให้เร็วขึ้นหรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร กิ่งทั้งสองมีลักษณะคล้ายกันความแตกต่างเพียงอย่างเดียวคือค่าของ "ค่าคงที่" ( y1, y2, …

3
การค้นหาเส้นทางที่สั้นที่สุดบนตารางหกเหลี่ยม
ฉันกำลังเขียนเกมเทิร์นเบสที่มีองค์ประกอบการจำลอง ภารกิจหนึ่งที่ฉันต้องวางสายในขณะนี้คือการค้นหาเส้นทาง สิ่งที่ฉันต้องการจะทำคือขยับนักผจญภัย AI หนึ่งไทล์ให้ใกล้กับเป้าหมายโดยใช้ x, y และเป้าหมายของเขา x, y ในการพยายามคิดออกเองฉันสามารถกำหนด 4 ทิศทางไม่มีปัญหาโดยใช้ dx = currentX - targetY dy = currentY - targetY แต่ฉันไม่แน่ใจว่าจะกำหนดเส้นทางใดใน 6 ทิศทางที่เป็นเส้นทางที่ "ดีที่สุด" หรือ "สั้นที่สุด" ตัวอย่างเช่นวิธีการตั้งค่าในปัจจุบันฉันใช้ East, West, NE, NW, SE, SW แต่เพื่อไปที่ไทล์ NE ที่ฉันย้าย East และ NW แทนที่จะเป็นแค่การเคลื่อนย้าย NW ฉันหวังว่านี่ไม่ใช่การท่องเที่ยวทั้งหมด เพียงแค่ลิงค์หรือสองเพื่อเริ่มฉันจะดี ข้อมูลส่วนใหญ่ที่ฉันพบคือการวาดเส้นตารางและระบบการประสานงานแปลก ๆ ที่จำเป็น

2
เร่งการสร้างพื้นผิวขั้นตอน
เมื่อไม่นานมานี้ฉันเริ่มทำงานกับเกมที่เกิดขึ้นในระบบสุริยจักรวาล หลังจากเส้นโค้งการเรียนรู้เล็กน้อย (โดยที่ไม่เคยทำงานกับ Scala, OpenGL 2 ES หรือ Libgdx มาก่อน) ฉันมีการสาธิตเทคโนโลยีพื้นฐานที่คุณหมุนรอบดาวเคราะห์ที่มีพื้นผิวเดียว: ปัญหาที่ฉันพบคือประสิทธิภาพของการสร้างพื้นผิว ภาพรวมอย่างรวดเร็วของสิ่งที่ฉันทำ: ดาวเคราะห์เป็นลูกบาศก์ที่ได้รับการเปลี่ยนรูปทรงกลม ในแต่ละด้านจะมีการใช้พื้นผิว anxn (เช่น 256 x 256) ซึ่งรวมอยู่ในพื้นผิว 8n xn หนึ่งอันที่ถูกส่งไปยังส่วนย่อย ไม่ได้ใช้ช่องว่างสองอันสุดท้ายพวกเขาอยู่ที่นั่นเพื่อให้แน่ใจว่าความกว้างเท่ากับกำลังงาน 2 พื้นผิวถูกสร้างขึ้นบน CPU ในปัจจุบันโดยใช้อัลกอริธึมเสียงรบกวน simplex เวอร์ชั่น 2012 ที่เชื่อมโยงกับกระดาษ'Simplex เสียง demystified '. ฉากที่ฉันใช้ทดสอบอัลกอริธึมมีสองทรงกลม: ดาวเคราะห์และพื้นหลัง ทั้งสองใช้พื้นผิวแบบ greyscale ซึ่งประกอบด้วยเสียงหกมิติแบบหกเสี้ยวง่ายเช่นถ้าเราเลือก 128x128 เป็นขนาดพื้นผิวมีขนาด 128 x 128 x 6 x 2 …

1
ลำดับของข้อมูลบัฟเฟอร์จุดสุดยอดเมื่อเรนเดอร์สสารดั้งเดิมมีการทำดัชนีหรือไม่?
ฉันกำลังสร้างสามเหลี่ยมสามมิติของวัตถุ ถ้าฉันสามารถเขียนมันลงในบัฟเฟอร์ตามลำดับที่คำนวณได้มันจะทำให้รหัส CPU ง่ายขึ้น จุดยอดสำหรับรูปสามเหลี่ยมจะไม่ต่อเนื่องกัน มีการลงโทษในการปฏิบัติงานใด ๆ สำหรับการเขียนออกคำสั่งหรือไม่?
14 opengl 

1
หน่วยการแปลหน่วย Orthographic ไม่ตรงกันในตาราง (เช่น 64 พิกเซลแปลไม่ถูกต้อง)
ฉันกำลังมองหาข้อมูลเชิงลึกเกี่ยวกับปัญหาเล็ก ๆ ด้วยการแปลหน่วยบนกริด อัปเดตและแก้ไข ฉันแก้ไขปัญหาของฉันเอง ดูรายละเอียดด้านล่าง ทุกอย่างในส่วนนี้ของโพสต์กลายเป็นถูกต้อง หากสิ่งใดมันสามารถทำหน้าที่เป็นแบบฝึกหัด / ตัวอย่าง / ช่วยเหลือขนาดเล็กสำหรับบุคคลต่อไป ติดตั้ง FBO, VAO, VBO หน้าต่าง 512x448 ตาราง 64x64 gl_Position = projection * world * position; projectionถูกกำหนดโดยortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);นี่คือฟังก์ชั่นการฉายภาพแบบตั้งฉากกับตำรา world ถูกกำหนดโดยตำแหน่งกล้องคงที่ที่ (0, 0) position ถูกกำหนดโดยตำแหน่งของสไปรต์ ปัญหา ในภาพหน้าจอด้านล่าง (มาตราส่วน 1: 1) ระยะห่างของกริดคือ 64x64 และฉันกำลังวาดหน่วยที่ (64, 64) อย่างไรก็ตามหน่วยวาดประมาณ ~ 10px …

4
กลไกพื้นฐานใน 'การคืนผลตอบแทน www' ของ Unity3D Game Engine
ในเอ็นจิ้นเกม Unity3D ลำดับรหัสทั่วไปสำหรับการรับข้อมูลระยะไกลคือ: WWW www = new WWW("http://remote.com/data/location/with/texture.png"); yield return www; กลไกพื้นฐานที่นี่คืออะไร? ฉันรู้ว่าเราใช้กลไกผลตอบแทนเพื่ออนุญาตให้เฟรมถัดไปประมวลผลในขณะที่การดาวน์โหลดเสร็จสมบูรณ์ แต่เกิดอะไรขึ้นภายใต้ประทุนเมื่อเราทำyield return www? มีวิธีใดบ้างที่ถูกเรียกใช้ (ถ้ามีในคลาส WWW) ความสามัคคีใช้เธรดหรือไม่ เลเยอร์ Unity "ส่วนบน" กำลังจับอินสแตนซ์ www แล้วทำอะไรบางอย่าง แก้ไข: คำถามนี้เกี่ยวกับ Unity3D internals โดยเฉพาะ ฉันไม่สนใจคำอธิบายเกี่ยวกับวิธีการyieldทำงานของคำสั่งใน C # แต่ฉันกำลังมองหามุมมองภายในเกี่ยวกับวิธีที่ Unity จัดการกับสิ่งปลูกสร้างเหล่านี้เพื่ออนุญาตให้ WWW สามารถดาวน์โหลดข้อมูลในลักษณะกระจายข้ามเฟรมต่างๆ
14 unity 

2
ฝัง IF text parser ในเกมอื่นหรือไม่
มีเครื่องมือแยกวิเคราะห์ข้อความเชิงโต้ตอบที่มีอยู่ที่ฉันสามารถฝังในเกมหรือแอปพลิเคชันอื่นได้หรือไม่ ฉันกำลังมองหาที่จะใช้เป็นห้องสมุด ฉันสามารถส่งผ่านวัตถุและคำกริยาที่มีจากด้านข้างของฉันเอง มันจะแยกประโยคจากผู้ใช้และให้โครงสร้าง / AST อธิบายสิ่งที่ผู้ใช้ถามกลับ จากนั้นรหัสของฉันเองก็สามารถดำเนินการตามคำขอนั้นได้ ฉันไม่ต้องการอะไรระดับ SIRI ประโยคและแอ็คชั่นพื้นฐานที่สนับสนุนเกม IF ปัจจุบันนั้นใช้ได้ดี แต่ฉันไม่ต้องการเขียนตัวแยกวิเคราะห์ข้อความ / ประโยคทั้งหมดด้วยตนเอง นี่ไม่ใช่เกม If และฉันไม่สามารถเขียนได้ทั้งหมดในภาษาเชิงโต้ตอบเช่นแจ้ง 7. น่าเสียดายที่ฉันไม่สามารถหาตัวอย่างของใครก็ตามที่ใช้ความสามารถในการแยกวิเคราะห์ข้อความของเอ็นจิ้นเหล่านี้โดยไม่ต้องเขียนทั้งหมด เกมในภาษาของเครื่องยนต์

3
เหตุผลที่อยู่เบื้องหลังการออกแบบเอนจิ้น Unity3D (วัตถุเกม / องค์ประกอบการแปลง)
ฉันพยายามที่จะเข้าใจเหตุผลที่อยู่เบื้องหลังการออกแบบเอ็นจิ้น Unity3D และนี่คือสิ่งที่ฉันไม่สามารถเข้าใจได้: ทำไมการแปลงข้อมูลที่เก็บไว้ในส่วนประกอบแยกต่างหากแทนที่จะเป็นส่วนหนึ่งของ GameObject เช่นชื่อมาสก์เลเยอร์และ แท็ก? มันไม่สามารถลบออกได้เหมือนกับส่วนประกอบอื่น ๆ ทั้งหมดอย่างไรก็ตามไม่มีทางเลือกและไม่จำเป็นต้องลบออก

2
ทำไมต้นไม้จึงเปล่งประกายเป็นฉากหลัง?
ขณะนี้ฉันกำลังสร้างฉากป่าในที่มืดและต้นไม้ก็ส่องแสงอยู่ไกล แต่เมื่อฉันเข้าใกล้พวกเขาก็สบายดี ฉันให้เฉดสีตั้งไว้ที่ "Nature / Tree Soft Occlusion [bark / leaves]" แต่พวกมันยังคงแสดงผลแปลก ๆ อยู่ไกลออกไป แต่พวกเขาก็ใกล้ดี ฉันพยายามวางต้นไม้ในโฟลเดอร์ชื่อ "Ambient-Occlusion" อย่างที่กล่าวไว้ที่นี่แต่ไม่มีโชค ยังมีหมอกปิดอยู่ ขอบคุณล่วงหน้า. UPDATE เมื่อฉันดูต้นไม้โดยใช้กล้อง "เส้นทางการแสดงผล" พวกเขาปรากฏเป็นสีแดงในขณะที่ทุกอย่างเป็นสีเขียว อัพเดท 2 ฉันลองติดตั้งแพ็กเกจที่ฉันดาวน์โหลดมาใหม่ แต่ก็ยังไม่มีโชค อัพเดท 3 ฉันได้เพิ่มต้นไม้บางต้นด้วยตนเองและมันทำงานได้ดี แต่เมื่อเพิ่มด้วยการวาดภาพบนภูมิประเทศฉันพบปัญหา ปรับปรุงครั้งสุดท้าย ฉันพยายามสร้างเกมเพื่อดูว่าสิ่งนี้มีผลกับ. exe หรือไม่และไม่ได้ ดังนั้นฉันจะต้องเพิกเฉยเมื่อฉันทำการดีบั๊กเพราะมันทำงานได้ดีในการสร้าง ขอบคุณสำหรับความช่วยเหลือทั้งหมดดูเหมือนว่าจะเป็นข้อผิดพลาดพร้อมความสามัคคี รูปภาพของงานสร้าง:
14 unity  shaders  terrain  tree 

2
จะแนบสคริปต์ส่วนกลางใน Unity ได้ที่ไหน
เท่าที่ Iknow ใน Unity สคริปต์ทุกตัวจะต้องแนบกับวัตถุ แต่เกิดอะไรขึ้นกับสคริปต์ทั่วโลก ตัวอย่างเช่นในเกมที่คล้ายกับเตตริสที่ควรแนบออบเจ็กต์องค์ประกอบ spawner และสคริปต์ผู้เสนอญัตติหรือไม่ หรือองค์ประกอบควรจัดการการเคลื่อนไหวของมันสำหรับตัวเอง? มีวิธีปฏิบัติที่ดีที่สุดสำหรับปัญหานี้หรือไม่?
14 unity 

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