การพัฒนาเกม

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

1
ใช้ประโยชน์จากการมัลติเธรดระหว่างเกมลูปและ openGL
การพูดคุยในบริบทของเกมโดยใช้ openGL renderer: สมมติว่ามีสองหัวข้อ: อัพเดทตรรกะของเกมและฟิสิกส์เป็นต้นสำหรับในเกมวัตถุ ทำให้ openGL ดึงสายสำหรับแต่ละวัตถุในเกมตามข้อมูลในวัตถุในเกม (เธรด 1 นั้นทำการปรับปรุงอยู่เสมอ) ยกเว้นว่าคุณมีสองสำเนาของวัตถุแต่ละเกมในสถานะปัจจุบันของเกมคุณจะต้องหยุดเธรด 1 ในขณะที่เธรด 2 ทำการเรียกการดึงมิฉะนั้นวัตถุในเกมจะได้รับการอัปเดตในช่วงกลางของการดึงการดึงสำหรับวัตถุนั้น ไม่พึงประสงค์! แต่การหยุดเธรด 1 เพื่อโทรออกอย่างปลอดภัยจากเธรด 2 ฆ่าวัตถุประสงค์ทั้งหมดของการทำงานหลายเธรด / การทำงานพร้อมกัน มีวิธีการที่ดีกว่านี้กว่าการใช้หลายร้อยหรือหลายพันหรือซิงค์วัตถุ / รั้วเพื่อให้สถาปัตยกรรมแบบมัลติคอร์สามารถใช้ประโยชน์จากประสิทธิภาพการทำงานหรือไม่ ฉันรู้ว่าฉันยังสามารถใช้มัลติเธรดสำหรับการโหลดพื้นผิวและการรวบรวมเฉดสีสำหรับวัตถุที่ยังไม่ได้เป็นส่วนหนึ่งของสถานะเกมปัจจุบัน แต่ฉันจะทำอย่างไรกับวัตถุที่ใช้งาน / มองเห็นได้โดยไม่ทำให้เกิดความขัดแย้งกับการดึงและอัปเดต จะเกิดอะไรขึ้นถ้าฉันใช้การล็อกการซิงค์แยกกันในแต่ละวัตถุของเกม วิธีนี้เธรดใด ๆ จะบล็อกเฉพาะวัตถุหนึ่งรายการ (กรณีที่เหมาะสมที่สุด) แทนที่จะเป็นทั้งรอบการอัพเดท / วาด แต่การล็อกแต่ละวัตถุมีค่าใช้จ่ายเท่าใด (เกมอาจมีวัตถุนับพันรายการ)

5
ฉันจะฉายจุดหลังกล้องได้อย่างถูกต้องได้อย่างไร?
ฉันกำลังสร้างเกม 3 มิติโดยใส่เครื่องหมายอัศเจรีย์เหนือจุดสนใจ เพื่อที่จะหาว่าในหน้าจอ 2D ที่ฉันควรวางเครื่องหมายของฉันฉันกำลังฉายจุด 3D ด้วยตนเองที่เครื่องหมายควร ดูเหมือนว่านี้: ดูดีทีเดียว เมื่อเครื่องหมายอยู่นอกหน้าจอฉันเพียงแค่คลิปพิกัดเพื่อให้พอดีกับหน้าจอ ดูเหมือนว่านี้: จนถึงตอนนี้ความคิดก็ไปได้สวย อย่างไรก็ตามเมื่อจุดที่น่าสนใจอยู่ด้านหลังกล้องพิกัด X, Y ที่ได้จะกลับด้าน (เหมือนเป็นบวก / ลบ) และฉันก็ได้เครื่องหมายที่ปรากฏบนมุมตรงข้ามของหน้าจอดังนี้: (จุดที่คาดการณ์ไว้จากนั้นเป็นจุดปลายของเครื่องหมายไม่ต้องคำนึงถึงการหมุนของเครื่องหมาย) มันสมเหตุสมผลแล้วเนื่องจากพิกัดที่อยู่เบื้องหลัง frustum นั้นกลับด้านใน X และ Y ดังนั้นสิ่งที่ฉันทำคือสลับกลับพิกัดเมื่ออยู่ด้านหลังกล้อง อย่างไรก็ตามฉันยังไม่รู้ว่าอะไรเป็นเงื่อนไขที่แน่นอนเมื่อพิกัดควรกลับด้าน นี่คือสิ่งที่รหัสการคาดการณ์ของฉันดูเหมือน (ใน C # กับ SharpDX): public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, …

1
เหตุใดจึงสำคัญที่ต้องแสดงเป้าหมายด้วยขนาดบิตเดียวกัน
ฉันกำลังคิดว่า GBuffer ประเภทใดที่ฉันจะต้องใช้สำหรับการแรเงาที่เลื่อนออกไปดังนั้นฉันจึงพยายามจัดทำเอกสารออนไลน์ด้วยตนเองเกี่ยวกับสิ่งที่พบบ่อยที่สุดและรูปแบบของพวกเขา GBuffer ส่วนใหญ่ที่ฉันเคยเห็นใช้ขนาดบิตเดียวกันสำหรับแต่ละเป้าหมายการแสดงผลซึ่งนำไปสู่ช่องที่ไม่ได้ใช้ อย่างไรก็ตามในการเดาแรกสำหรับ GBuffer ของฉันบนกระดาษฉันต้องการสองเป้าหมาย 24 บิตและสอง 32 คนหรือสาม 24 และหนึ่ง 32 ฉันเข้าใจว่าการมีขนาด "สิ่งที่แนบ" เหมือนกันสามารถจัดแนวได้ดีกว่า แต่ในทางปฏิบัติแล้วมันจะดีกว่าถ้าจะเสียช่องสัญญาณ (หรือสำรองไว้เพื่อใช้ในอนาคต) และมี RTs ขนาดเท่ากันหรือควรใช้สิ่งที่ต้องการ ในกรณีก่อนหน้านี้ทำไมมันถึงได้เปรียบเช่นนั้นบิต 24 บิตจะถูกเพิ่มเป็น 32 หรือไม่?

3
การสร้างชื่อ
ฉันกำลังสร้างเกม (หรือวางแผนอย่างน้อย) และเพื่อทำสิ่งนั้นฉันต้องการวิธีสร้างชื่อโดยอัตโนมัติสำหรับ "ผู้บังคับบัญชา" ของ NPC (คำอธิบายที่ยาวและไม่เกี่ยวข้องที่นี่) สิ่งนี้เป็นตัวอย่างที่ดีของสิ่งที่ฉันหมายถึง ฉันมีความคิดว่าฉันสามารถสร้างฐานข้อมูลชื่อตามสัญชาติอาจเป็นคู่แรก / คู่สุดท้ายและกำหนดชื่อแบบสุ่มโดยใช้รายชื่อที่ไม่สนใจดังนั้นฉันจึงไม่ได้รับเหมือน Homer Simpson และถูกฟ้องร้องหรืออะไรบางอย่าง ปัญหาที่เกิดขึ้นคือฉันต้องสร้างฐานข้อมูลขนาดใหญ่ของชื่อเพื่อให้สามารถใช้งานได้ อาจใช้เวลาตลอดไปหรือเสียค่าใช้จ่ายเว้นแต่มีบางคนมีรายการชื่อให้ใช้ฟรีแล้ว ฉันมีความคิดอื่นที่ฉันสร้างสระและพยัญชนะคู่สุ่มและเพิ่มเข้าด้วยกัน แต่เป็นโปรแกรมด่วนที่สร้างชื่อเช่นนี้: Seermeecpa Cime Ofmiahwumafi Gozidi Effawided (สำหรับผู้ที่สนใจโค้ดคุณสามารถดูได้ที่นี่ ) นี่มัน ... คำหนึ่ง ดียกเว้น "Gozidi" - อันนั้นใช้ได้ ถึงกระนั้นอัตราความสำเร็จก็ยังไม่ชัดเจนนัก มีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อสร้างชื่อให้เสียงดีกว่า (ดูด้านล่าง) หรือฉันควรเริ่มทำรายการนั้นหรือไม่? ฉันจะเลียนแบบวิธีที่มนุษย์ตัดสินใจได้หรือไม่ว่าชื่อดีหรือไม่อย่างน้อยก็มีความแม่นยำ ฉันต้องการอะไรแบบนี้เพื่อค้นหาในรายการใหญ่ สิ่งที่ฉันหมายถึงโดย "ดีกว่า" คือแทนที่จะรวมตัวอักษรแบบสุ่ม (ซึ่งมันคือเพื่อความเป็นธรรม) สิ่งที่ดูเหมือนชื่อจริง พวกเขาสามารถมาจากวัฒนธรรมใด ๆ (หรือเสียงเหมือนพวกเขา) จริงหรือจินตนาการอะไรก็ได้ตราบใดที่คุณเป็นใบ้โปรเฟสเซอร์อเมริกันคนเดียวที่ฉันพูดได้ว่าไม่มีปัญหามากเกินไป หากคุณต้องการคำชี้แจงเพิ่มเติมให้ไปข้างหน้าและถาม ฉันไม่แน่ใจจริงๆว่าจะใส่อะไรที่นี่ ภาคผนวก: …

2
วิธีจัดการกับการเคลื่อนไหวแบบเรียลไทม์ด้วยการทำนายฝั่งไคลเอ็นต์
ฉันกำลังสร้างเกมมัลติเพลเยอร์แบบเรียลไทม์ที่รันลูป 'ฟิสิกส์' แบบเดียวกันบนไคลเอนต์และเซิร์ฟเวอร์ ฉันกำลังใช้พฤติกรรมการบังคับเลี้ยว 'เดิน' ที่เป็นการเคลื่อนไหวแบบสุ่มที่สำคัญ ไคลเอนต์และเซิร์ฟเวอร์สร้างหมายเลขสุ่มที่แตกต่างกันเมื่อเรียกใช้อัลกอริทึมหลงทาง ฉันสงสัยว่าฉันสามารถเคลื่อนไหวแบบสุ่มตามธรรมชาติได้อย่างไร แต่ใช้ค่าคงที่ที่จะประกันลูกค้าและเซิร์ฟเวอร์ให้ได้ข้อสรุปเดียวกัน

2
เนื่องจาก Table.drawDebug เลิกใช้แล้วใน libGDX ฉันควรใช้อะไรแทน
ฉันกำลังติดตามหนังสือ "Learning LibGDX Game Development" เพื่อสร้างเกมอย่างง่าย ฉันอยู่ในส่วนการสร้างเมนูที่เราสร้างสเตจและแสดงผลด้วยเส้นขอบการดีบัก หนังสือเล่มนี้บอกว่าจะใช้Table.drawDebug(stage)แต่วิธีการแบบคงที่นี้ดูเหมือนว่าจะถูกลบออกจากTableชั้นเรียนกรอบทั้งหมด ฉันกำลังนำเข้าcom.badlogic.gdx.scenes.scene2d.ui.Table; ด้านล่างคือรหัสของฉัน: @Override public void render(float deltaTime) { Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (debugEnabled) { debugRebuildStage -= deltaTime; if (debugRebuildStage <= 0) { debugRebuildStage = DEBUG_REBUILD_INTERVAL; rebuildStage(); } } stage.act(deltaTime); stage.draw(); Table.drawDebug(stage); } บรรทัดสุดท้ายTable.drawDebug(stage);มีข้อผิดพลาดในการรวบรวม"The method drawDebug(ShapeRenderer) in the type Table is …

2
ฉันควรใช้โปรแกรม OpenGL จำนวนเท่าใดเพื่อแสดงวัตถุหลายรายการ
ฉากของฉันมีวัตถุหลายอย่างในนั้น (สมมติว่า 3 ลูกบาศก์ 1 กระบอก 8 ทรงกลม) ฉันคิดว่าฉันควรสร้างจุดสุดยอดสำหรับแต่ละจุด ฉันควรมีกี่โปรแกรม ทางเลือก: หนึ่งโปรแกรมต่อวัตถุ โปรแกรมหนึ่งสำหรับลูกบาศก์ทั้งหมดและอีกอันสำหรับทรงกลมทั้งหมด (สมมติว่าพวกเขาใช้เฉดสีเดียวกัน) หนึ่งโปรแกรมขนาดใหญ่สำหรับทุกสิ่ง แนวทางที่ถูกต้องคืออะไร?

1
ใน OpenGL การเรนเดอร์“ zero state” คืออะไร?
เมื่อเร็ว ๆ นี้ในการสัมภาษณ์งานฉันได้กล่าวว่าฉันสอนตัวเอง OpenGL ที่ทันสมัยและแสดงผลด้วยวัตถุบัฟเฟอร์จุดสุดยอดเพราะมหาวิทยาลัยของฉันสอนเฉพาะฟังก์ชั่นไปป์ไลน์ที่มีการแสดงโหมดทันทีในเวลานั้น ผู้สัมภาษณ์ขัดจังหวะฉันสั้น ๆ เพื่อบอกว่า VBOs ถูกแทนที่อย่างมีประสิทธิภาพด้วยสิ่งที่เรียกว่า "การปรับค่าสถานะเป็นศูนย์" แล้วให้ฉันดำเนินการต่อ ฉันลืมถามในภายหลังเกี่ยวกับสิ่งที่ตั้งใจทำเพราะเราย้ายไปเรียนวิชาอื่นอย่างรวดเร็วและผู้สัมภาษณ์หมดเวลาในตอนท้ายเนื่องจากตารางงานที่ยุ่ง หลังจากนั้นฉันค้นหาทางออนไลน์เพื่อหา "สถานะ OpenGL เป็นศูนย์" และ "แสดงสถานะเป็นศูนย์" โดยไม่มีผลลัพธ์ที่เกี่ยวข้องซึ่งส่วนใหญ่เป็นเพียงเรื่องเกี่ยวกับสถานะ OpenGL องค์กรที่มีปัญหาเป็นงานวิจัยที่หนักมากดังนั้นจึงมีโอกาสที่จะเป็นส่วนเสริมที่มีการสนับสนุนเพียงเล็กน้อยในปัจจุบันหรือว่าคำศัพท์ที่ใช้แตกต่างกันไป

3
การเข้าถึงเซ็นเซอร์ตรวจจับความเคลื่อนไหว DualShock 4 ใน Windows (Unity นึกคิด)
ฉันกำลังพยายามใช้IMUของ DualShock 4 เป็นตัวควบคุมการเคลื่อนไหวใน Unity ภายใต้ Windows 7 จนถึงตอนนี้ฉันได้ลองแล้ว: DS4Windows ( 1.5.11 ): อ่านข้อมูลเซ็นเซอร์ตรวจจับความเคลื่อนไหว แต่ไม่แสดงให้พวกเขาเห็นถึงความสามัคคีเป็นแกนยกเว้นว่าฉันจับคู่พวกมันกับแท่งด้านซ้ายและขวา นี่ยังไม่เพียงพอเนื่องจากฉันสูญเสียการใช้งานแท่งฉันสามารถใส่ข้อมูลได้เพียง 4 จาก 6 ช่องทางเท่านั้นและค่าที่ผ่านมาจะถูกตัดเป็นช่วงแคบ ๆ Motioninjoy (0.7.1001): ไม่พบว่า DS4 เป็นตัวควบคุม (เอกสารล่าสุดอ้างอิงเฉพาะ DS3 และก่อนหน้า) GlovePIE (0.43): หลังจากทำตามคำแนะนำสำหรับการใช้ DualShock 3 กับ LibUSB-Win32 (ยิงยาว) คุณสมบัติ SixAxis จะว่างเปล่าทั้งหมด ในอดีตที่ผ่านมาฉันเคยใช้โปรแกรมภายนอกเช่น GlovePIE เพื่อจับข้อมูล Wii remote motion sensor และส่งไปยัง Unity ผ่านทางข้อความ …

3
ฉันจะแปลพิกัดทรงกลมเป็นพิกัดคาร์ทีเซียนได้อย่างไร
มีใครบางคนชี้ให้ฉันในทิศทางที่ถูกต้องว่าจะประสบความสำเร็จได้อย่างไร? คณิตศาสตร์ / เรขาคณิต 3 มิติมักทำให้ฉันขว้าง ฉันกำลังมองหาบางสิ่งเช่นนี้ (นึกคิดใน C #): public Vector3 getCartesianFor(float elevation, float asimuth, float polar) { return ????; }

2
การใช้ระบบ L เพื่อสร้างเมืองแบบเป็นขั้นตอน
ฉันกำลังสร้างแอพที่เน้นเนื้อหาที่สร้างตามขั้นตอนเป็นจำนวนมาก จนถึงตอนนี้ฉันประสบความสำเร็จในการนำการสร้างภูมิประเทศและรูปร่างของแผนที่โดยใช้สัญญาณรบกวนแบบง่าย ๆ ฉันพอใจจริงๆกับรูปลักษณ์ ตอนนี้ฉันพยายามทำแบบเดียวกันกับเมืองต่างๆ ฉันแค่ต้องสร้างเลย์เอาต์ 2D ของถนนและอาคาร ฉันได้ดูแล้วดูเหมือนว่าคนส่วนใหญ่แนะนำให้ใช้ L-Systems อย่างไรก็ตามฉันไม่สามารถคาดศีรษะโอบรอบพวกเขาได้ ฉันได้รับแนวคิด แต่ไม่ใช่การนำไปใช้เป็นโค้ด ใครบ้างมีตัวอย่างรหัสของ L-Systems สำหรับเมืองที่สร้างขึ้นตามขั้นตอนหรือคำแนะนำเกี่ยวกับวิธีอื่น ๆ ในการจัดการเมือง?

2
ปัญหาในการจับคู่ขนาดตัวอักษรกับความละเอียดหน้าจอใน libgdx
ฉันมีปัญหาในการแสดงข้อความในเกมของฉันที่มีขนาดเท่ากันบนหน้าจอที่แตกต่างกันและฉันทำการทดสอบอย่างง่าย การทดสอบนี้ประกอบด้วยการแสดงข้อความที่เหมาะสมบนหน้าจอฉันต้องการให้ข้อความมีขนาดเท่ากันจากหน้าจอและจาก DPI ฉันพบสิ่งนี้และคำตอบที่ฉันคิดว่าน่าจะแก้ปัญหาได้ แต่ทำไม่ได้ ในเดสก์ท็อปขนาดก็โอเค แต่ในโทรศัพท์ของฉันใหญ่เกินไป นี่คือผลลัพธ์บน Nexus 4 ของฉัน: (ความหนาแน่น 768x1280, 2.0) และนี่คือผลลัพธ์บน MacBook ของฉัน: (ความหนาแน่น 480x800, 0.6875) ฉันใช้Open Sans Condensed (ลิงก์ไปยังฟอนต์ google) อย่างที่คุณเห็นบนเดสก์ท็อปดูดี แต่บนโทรศัพท์มันใหญ่มาก นี่คือรหัสการทดสอบของฉัน: public class TextTest extends ApplicationAdapter { private static final String TAG = TextTest.class.getName(); private static final String TEXT = "Tap the screen …

2
การแก้ไขจะทำงานอย่างไรเพื่อทำให้การเคลื่อนที่ของวัตถุราบรื่นขึ้น?
ฉันถามคำถามที่คล้ายกันสองสามครั้งในช่วง 8 เดือนที่ผ่านมาโดยไม่มีความสุขจริง ๆ ดังนั้นฉันจะทำให้คำถามทั่วไปยิ่งขึ้น ฉันมีเกม Android ซึ่งเป็น OpenGL ES 2.0 ภายในนั้นฉันมี Game Loop ดังต่อไปนี้: ลูปของฉันทำงานบนหลักการขั้นตอนเวลาที่แน่นอน (dt = 1 / ticksPerSecond ) loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ updateLogic(dt); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; } render(); การรวมของฉันทำงานเช่นนี้: sprite.posX+=sprite.xVel*dt; sprite.posXDrawAt=sprite.posX*width; ตอนนี้ทุกอย่างทำงานได้สวยตามที่ฉันต้องการ ฉันสามารถระบุได้ว่าฉันต้องการให้วัตถุเคลื่อนที่ในระยะหนึ่ง (ความกว้างของหน้าจอพูด) ภายใน …

1
ฉันพบเกมที่มีชื่อเดียวกับของฉัน! ฉันควรทำอย่างไรดี?
ฉันเผยแพร่เกมEyerollerของฉันใน Google Playเมื่อวันก่อน ฉันตรวจสอบว่าไม่มีเกมบน Google Play ที่ใช้ชื่อเดียวกัน แต่วันนี้ฉันค้นหา "eyeroller" ใน Google (ใช่ฉันควรจะทำมันนานมาแล้ว) และตระหนักว่ามีเกมที่ชื่อว่าeyeRollerใน AppStore มันเป็นเกมที่แตกต่างอย่างสิ้นเชิงอย่างที่คุณเห็น อะไรคือความหมายทางกฎหมายของสิ่งนี้ สิ่งต่างๆเช่นเครื่องหมายการค้าและลิขสิทธิ์เป็นปัญหาหรือไม่ ฉันควรเปลี่ยนชื่อเกมหรือไม่

7
ฉันจะตายอย่างถาวรใน MUD ได้อย่างไรเป็นที่ยอมรับและยุติธรรมสำหรับผู้เล่น
ฉันได้พิจารณาเขียนโคลนสำหรับปีและฉันมีความคิดมากมายที่เพื่อนของฉันคิดว่าเจ๋งจริง ๆ (และนั่นคือวิธีที่ฉันหวังว่าจะได้รับทุกที่ - คำพูดจากปาก) มีสิ่งหนึ่งที่ฉันอยากได้เสมอคือเพื่อนและคนแปลกหน้าเกลียด: ความตายถาวร ทีนี้การตอบสนองทางอารมณ์ที่ฉันได้รับก็คือความรังเกียจต่ออวัยวะภายในทุกครั้ง ฉันค่อนข้างแน่ใจว่าฉันเป็นคนเดียวที่ต้องการสิ่งนี้หรือถ้าฉันไม่ได้ฉันเป็นคนกลุ่มน้อย ตอนนี้เหตุผลที่ผมอยากให้มันเป็นเพราะฉันต้องการการกระทำของผู้เล่นที่จะสำคัญ ซึ่งแตกต่างจาก MUD อื่น ๆ จำนวนมากที่มีชุดของเมืองรัฐคงที่และสถาบันทางสังคม ฯลฯ ฉันต้องการสิ่งที่ผู้เล่นของฉันทำฉันควรจะได้รับใด ๆ ที่จะเปลี่ยนสถานการณ์จริง และนั่นรวมถึงการฆ่าคน หากคุณฆ่าใครบางคนคุณไม่ได้ส่งพวกเขาไปหมดเวลาคุณฆ่าพวกเขา จะเกิดอะไรขึ้นเมื่อคุณฆ่าผู้คน พวกเขาหายไป พวกเขาจะไม่กลับมาอีกในครึ่งชั่วโมงเพื่อไปคุยกับคุณอีก พวกเขาไปแล้ว. ตลอดไป ด้วยการทำให้ตายไม่ถาวรคุณทำให้ความตายไม่ใช่เรื่องสำคัญ มันจะคล้ายกันถ้าจุดสำคัญของส่วนโค้งของตัวละครกำลังได้รับตั๋วเร่ง มันทำให้ราคาถูกลง ความตายที่ไม่ถาวรทำให้ความตายลดลง ฉันจะ: 1) โน้มน้าวใจผู้เล่นของฉัน (และคนที่สุ่ม!) ว่านี่เป็นความคิดที่ดีจริง ๆ หรือ? 2) หาวิธีอื่นที่จะทำให้ความตายและความรุนแรงมีความสำคัญมากที่สุดในชีวิตจริง (ยกเว้นในเกมและแน่นอน) การลบตัวอักษร sans? มีทางเลือกอะไรบ้างที่นั่น?
10 multiplayer  mmo  mud 

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