การพัฒนาเกม

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

3
วิธีการ wire machine state finite ให้เป็นสถาปัตยกรรมที่อิงองค์ประกอบ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา เครื่องรัฐดูเหมือนจะก่อให้เกิดการพึ่งพาที่เป็นอันตรายในสถาปัตยกรรมที่ใช้ส่วนประกอบ มีการจัดการการสื่อสารระหว่างเครื่องรัฐและส่วนประกอบที่ดำเนินพฤติกรรมที่เกี่ยวข้องกับรัฐอย่างไรโดยเฉพาะ ฉันอยู่ที่ไหน: ฉันใหม่กับสถาปัตยกรรมที่อิงองค์ประกอบ ฉันกำลังสร้างเกมต่อสู้แม้ว่าฉันไม่คิดว่ามันจะสำคัญ ฉันนึกภาพเครื่องรัฐของฉันถูกใช้เพื่อสลับสถานะเช่น "หมอบคลาน", "ห้าว", "ปิดกั้น" ฯลฯ ฉันพบว่าเทคนิคการจัดการสถานะนี้เป็นระบบที่เป็นธรรมชาติที่สุดสำหรับสถาปัตยกรรมที่อิงองค์ประกอบ แต่มันขัดแย้งกับเทคนิคที่ฉันได้อ่าน: ระบบส่วนประกอบของวัตถุเกมแบบไดนามิกสำหรับตัวละครพฤติกรรมที่ไม่แน่นอนมันแสดงให้เห็นว่า ตัวเองโดยการตรวจสอบเงื่อนไขการเปิดใช้งานอย่างต่อเนื่อง ฉันคิดว่าการกระทำเช่น "วิ่ง" หรือ "เดิน" เข้าท่าเป็นเรื่องของรัฐซึ่งไม่เห็นด้วยกับคำตอบที่ยอมรับได้ที่นี่: /gamedev//a/7934 ฉันพบสิ่งนี้มีประโยชน์ แต่ไม่ชัดเจน: จะใช้พฤติกรรมอย่างไรในสถาปัตยกรรมเกมที่อิงส่วนประกอบได้อย่างไร มันแสดงให้เห็นว่ามีองค์ประกอบแยกต่างหากที่มีอะไรนอกจากเครื่องรัฐ แต่สิ่งนี้จำเป็นต้องมีการเชื่อมต่อระหว่างส่วนประกอบเครื่องรัฐกับส่วนประกอบอื่นเกือบทั้งหมด ฉันไม่เข้าใจวิธีจัดการข้อต่อนี้ นี่คือการเดาบางอย่าง: A. ส่วนประกอบขึ้นอยู่กับเครื่องของรัฐ: ส่วนประกอบได้รับการอ้างอิงถึงส่วนประกอบของเครื่องของgetState()รัฐซึ่งจะส่งกลับค่าคงที่การแจงนับ คอมโพเนนต์อัปเดตตัวเองเป็นประจำและตรวจสอบสิ่งนี้ตามความจำเป็น B. สถานะของเครื่องจักรขึ้นอยู่กับส่วนประกอบ: ส่วนประกอบ สถานะของเครื่องได้รับการอ้างอิงถึงส่วนประกอบทั้งหมดที่มีการตรวจสอบ มันสอบถามgetState()วิธีการของพวกเขาเพื่อดูว่าพวกเขาอยู่ที่ไหน C. สิ่งที่เป็นนามธรรมระหว่างพวกเขา ใช้ฮับเหตุการณ์? รูปแบบคำสั่ง? D. แยกสถานะของวัตถุที่ ใช้เป็นส่วนประกอบของรูปแบบสถานะอ้างอิง …

5
ฉันจะสร้าง HUD บนหน้าจอใน libgdx ได้อย่างไร
ฉันใหม่สำหรับ libgdx และฉันพบว่าฉันกำลังถูกทำให้งงโดยสิ่งที่ง่ายที่สุด ดูเหมือนว่าต้องการให้ฉันทำสิ่งต่าง ๆ ด้วยวิธีเฉพาะ แต่เอกสารไม่ได้บอกฉันว่ามันคืออะไร ฉันต้องการสร้างเกม 2d ที่เรียบง่ายซึ่งผู้เล่นควบคุมยานอวกาศ ล้อเมาส์จะซูมเข้าหรือออกและข้อมูลและการควบคุมจะปรากฏขึ้นบนหน้าจอ แต่ฉันไม่สามารถทำให้ล้อเมาส์ไม่ซูม UI ได้ ฉันลอง futzing กับเมทริกซ์การฉายในระหว่าง นี่คือรหัส (ปัจจุบัน) ของฉัน: public class PlayStage extends Stage { ... public void draw() { // tell the camera to update its matrices. camera.update(); // tell the SpriteBatch to render in the // coordinate …
23 libgdx 

5
อะไรคือความแตกต่างระหว่างเฟรมเวิร์กเกมและเอ็นจิ้นเกม?
อะไรคือความแตกต่างระหว่างเฟรมเวิร์กเกม (ตัวอย่างเช่น XNA กับ C #, SDL สำหรับ c ++) และเอ็นจิ้นเกม เฟรมเวิร์กของเกมใช้เอ็นจินหรือไม่ เอนจินของเกมห่อหุ้มเอนจิ้นย่อยเช่นเอนจินของฟิสิกส์เครื่องยนต์เอ็นจินหรือไม่? พวกเขาควรจะใช้ร่วมกันหรือพวกเขาเป็นพิเศษร่วมกัน? ฉันคิดว่ามันมีเอ็นจิ้นแยกต่างหากสำหรับทั้ง 2D และ 3D?

3
หนึ่งจะทำการทดสอบหน่วยในเครื่องมือเกมได้อย่างไร
สิ่งที่น่าละอายเป็นอย่างมากฉันไม่เคยเขียนแบบทดสอบหน่วยที่เหมาะสมมีเพียงโปรแกรมทดสอบขนาดเล็กที่ไม่มีการรวบรวมกันซึ่งฉันจะทิ้งหลังจากการทดสอบประสบความสำเร็จ ฉันไม่มีความคิดที่ชัดเจนว่าจะทำการทดสอบหน่วยในโครงการเกมอย่างไร (ภาษาของฉันคือ C ++) ฉันควรมีโครงการแยกต่างหากสำหรับแต่ละระบบย่อยในเอ็นจินของฉันและการทดสอบที่เกี่ยวข้องกับมันแล้วมีโครงการ / โซลูชันที่ใหญ่กว่าที่สร้างเอ็นจิ้นจริง พูดเช่นฉันมีeventโมดูลในเครื่องยนต์ของฉัน ฉันจะจัดการกับสิ่งนั้นได้อย่างไร

1
การเรนเดอร์ Isometric และการเลือก?
ฉันกำลังมองหาสูตรในการพล็อต (หน้าจอโลก>) และตัวเลือกเมาส์ (หน้าจอโลก>) กระเบื้องสามมิติในโลกรูปเพชร สิ่งที่ฉันพยายามทำอยู่เสมอเป็นไปได้ วิธีปกติ / ถูกต้องในการทำเช่นนี้คืออะไร?

1
ตัวอย่างรหัสพฤติกรรมต้นไม้
http://altdevblogaday.org/2011/02/24/introduction-to-behavior-trees/ เห็นได้ชัดว่าบทความที่น่าสนใจที่สุดที่ฉันพบในเว็บไซต์นี้ คุณคิดยังไงกับเรื่องนี้? มันไม่มีตัวอย่างโค้ดคุณไม่รู้หรือไม่? ฉันยังอ่านว่าสภาพเครื่องจักรไม่ยืดหยุ่นมากเมื่อเทียบกับแผนผังพฤติกรรม ... ด้านบนฉันไม่แน่ใจว่ามีการเชื่อมโยงระหว่างเครื่องรัฐและรูปแบบของรัฐจริงหรือไม่?
23 ai  state  tree  behavior 

2
การใช้“ การกระโดดสองครั้งอย่างถูกต้อง”
ฉันกำลังเล่นเกม 2D บน iPhone โดยใช้ Corona (เวอร์ชั่นทดลองดังนั้นฉันไม่สามารถใช้ฟอรัมของพวกเขาได้) เกมดังกล่าวเกี่ยวข้องกับตัวละครที่ตกลงมาบนท้องฟ้าและฉันพยายามที่จะใช้ "การกระโดดสองครั้ง" สำหรับตัวละครเพื่อให้เขาสามารถกระโดดขึ้นได้ในขณะที่ตกลงมา ฉันใช้ห้องสมุดฟิสิกส์ของ Corona เพื่อให้ตัวละครตกและวิธีที่ดีที่สุดในการกระโดดให้เขาคือการใช้วิธีการกระตุ้นตามแนวตั้ง object:applyLinearImpulse(0, -0.4, object.x, object.y) ปัญหาที่ฉันเผชิญคือเมื่อตัวละครเพิ่งเริ่มต้น (ความเร็วแนวตั้งต่ำ) เขากระโดดสูงมากและเมื่อเขาตกลงมาพักหนึ่ง (ความเร็วแนวตั้งสูง) การกระโดดนั้นเล็กน้อย ฉันเดาว่าทางออกที่ดีที่สุดคือใช้สมการบางอย่างกับความเร็วเป็นอินพุตเพื่อให้กระโดดเหมือนกันโดยไม่คำนึงถึงความเร็ว แต่ฉันไม่สามารถหาได้ว่าสมการนั้นจะเป็นอะไร โอเคนั่นคือความคิดทั้งหมดของฉัน คำถามสุดท้ายก็คือคุณใช้การกระโดดสองครั้งกับฟิสิกส์ได้อย่างไร มีสมการที่เหมาะสมสำหรับปัญหาของฉันหรือไม่ ฉันควรใช้แนวทางอื่นหรือไม่? มันเคยทำมาก่อนในเกมเช่น Smash Bros ดังนั้นจึงมีวิธีแก้ปัญหาที่ทำซ้ำได้ใช่ไหม?
23 2d  physics 

15
วิธีการลดการจัดการไมโครเกมในเกมวางแผน?
เมื่อออกแบบเกมวางแผน (หรือเกมประเภทเดียวกัน) คุณจะหลีกเลี่ยงการให้ผู้เล่นมุ่งเน้นไปที่การบริหารการเงินขนาดเล็กได้อย่างไร สิ่งที่ควรทำและสิ่งใดที่ควรหลีกเลี่ยงในกลไกการเล่นเกม?

3
บัฟเฟอร์สองเท่าในเกม HTML5 Canvas หรือไม่
เกม Canvas ที่เรียบง่ายของฉันดูเหมือนจะทำงานได้ดีบน Chrome และ FF บน Mac / Linux ฉันยังไม่มีโอกาสทดสอบบนสมาร์ทโฟนหรือ Windows มันไม่ได้ใช้การบัฟเฟอร์คู่ แต่ฉันได้เห็นตัวอย่าง JS Canvas บางส่วนที่ใช้ การใช้บัฟเฟอร์คู่แนะนำเมื่อใด มันสร้างความแตกต่างสำหรับเบราว์เซอร์เฉพาะเท่านั้นหรือไม่ มีผลการดำเนินงานที่สำคัญหรือไม่ ขอบคุณ!

4
จะใช้โลกทดสอบที่ไม่ต้องรีบูตได้อย่างไร
กำลังมองหาแนวคิดในการทำสิ่งต่อไปนี้: ฉันต้องการเขียน "โลก" อย่างง่ายใน Java หนึ่งที่ฉันสามารถเริ่มต้นแล้วเพิ่มวัตถุใหม่ในภายหลังในภายหลังเพื่อจำลอง / สังเกตพฤติกรรมที่แตกต่างระหว่างวัตถุที่มีอยู่ แผนการนั้นคือการเขียนโค้ดของวัตถุที่ใหม่กว่าหลังจากดูวัตถุเก่าในขณะนั้นจากนั้นโหลด / วางวัตถุเหล่านั้นในโลกที่มีอยู่ ปัญหาคือฉันไม่ต้องการหยุดหรือเริ่มโลกใหม่เมื่อเริ่มต้นฉันต้องการให้ทำงานสองสามสัปดาห์ แต่ฉันต้องการความสามารถในการวางวัตถุและทำซ้ำ / เขียนใหม่ / ลบ / สร้าง / กลายพันธุ์ เมื่อเวลาผ่านไปโดยไม่จำเป็นต้องรีบูต โลกอาจเป็นเรื่องง่ายเหมือนอาร์เรย์ 100 x 100 ของตำแหน่ง X / Y พร้อม GUI แบบเรียงต่อกันที่เป็นไปได้ที่จะเป็นตัวแทนของโลก ฉันรู้ว่าฉันต้องการกระบวนการ ticktimer เพื่อติดตามวัตถุและให้โอกาสในการกระทำ ตัวอย่าง: ฉันโค้ด World.java ในวันจันทร์และปล่อยให้มันทำงานอยู่ จากนั้นในวันอังคารที่ฉันเขียนคลาสใหม่ที่เรียกว่า Rock.java (ที่ไม่ย้าย) จากนั้นฉันก็โหลด / วางมัน (อย่างใด?) ในโลกที่กำลังดำเนินอยู่นี้ (ซึ่งมันจะวางสุ่มลงไปในแถวลำดับโลกและไม่ย้าย) จากนั้นในวันพุธที่ฉันสร้างคลาสใหม่ที่เรียกว่า …

6
มีการออกแบบอะไรบ้างสำหรับระบบเอนทิตีที่อิงส่วนประกอบที่ใช้งานง่าย แต่ยังยืดหยุ่นได้
ฉันได้รับความสนใจในระบบเอนทิตีที่อิงองค์ประกอบอยู่พักหนึ่งแล้วอ่านบทความที่นับไม่ถ้วนในเกม (เกม InsomiacมาตรฐานEvolve Your Hierarchy , T-Machine , Chronoclast ... เพื่อชื่อไม่กี่คน) พวกเขาดูเหมือนจะมีโครงสร้างด้านนอกของสิ่งที่ชอบ: Entity e = Entity.Create(); e.AddComponent(RenderComponent, ...); //do lots of stuff e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6); และถ้าคุณนำความคิดของข้อมูลที่ใช้ร่วมกัน (นี่คือการออกแบบที่ดีที่สุดที่ฉันเคยเห็นมาในแง่ของการไม่ทำซ้ำข้อมูลทุกที่) e.GetProperty<string>("Name").Value = "blah"; ใช่มันมีประสิทธิภาพมาก อย่างไรก็ตามการอ่านหรือเขียนนั้นไม่ใช่วิธีที่ง่ายที่สุด มันรู้สึกว่าเป็น clunky และทำงานกับคุณ โดยส่วนตัวฉันต้องการทำสิ่งที่ชอบ: e.SetPosition(4, 5, 6); e.Name = "Blah"; แม้ว่าแน่นอนว่าหนทางเดียวที่จะได้รับการออกแบบนั้นกลับมาอยู่ในเอนทิตี -> NPC-> ศัตรู -> FlyingEnemy-> FlyingEnemy- ด้วย …

4
ฉันควรใช้โครงสร้างข้อมูลใดสำหรับต้นไม้พรสวรรค์ของ Diablo / WoW
ฉันกำลังพิจารณาที่จะนำระบบพรสวรรค์ไปใช้กับ RPG ออนไลน์ซึ่งคล้ายกับที่เห็นใน World of Warcraft ซึ่งการได้รับทักษะจะปลดล็อค "ระดับ" ถัดไปที่อยู่ใต้ต้นไม้ ไม่มีใครรู้วิธีที่ดีที่สุดในการใช้โครงสร้างนี้ในฐานข้อมูล / รหัส?

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

6
วิธีที่ง่ายที่สุดในการสร้างภูมิประเทศที่ราบรื่นสำหรับเกม 2d คืออะไร?
วิธีที่ง่ายที่สุดในการสร้างภูมิประเทศที่ราบรื่นสำหรับเกม 2d เช่น "Moon Buggy" หรือ "Route 960" คืออะไร? ฉันได้รับคำตอบที่ stackoverflow.com เกี่ยวกับการสร้างอาเรย์ของความสูงแบบสุ่มและเบลอในภายหลัง ใช่มันค่อนข้างโอเค แต่มันจะเป็นการดีกว่าถ้าคุณให้คะแนนและรับโค้งที่ราบรื่น

7
การคำนวณแรงโน้มถ่วงที่เหมาะสมที่สุด
ฉันมีสิ่งของหลายชิ้นที่มีขนาดและความเร็วต่างกันไปซึ่งกันและกัน ในการอัพเดททุกครั้งฉันต้องข้ามวัตถุทุกอย่างและรวมแรงเข้าด้วยกันเนื่องจากแรงโน้มถ่วงของวัตถุอื่น ๆ มันไม่ได้ปรับขนาดได้ดีมากเป็นหนึ่งในสองคอขวดใหญ่ที่ฉันพบในเกมของฉันและฉันไม่แน่ใจว่าต้องทำอย่างไรเพื่อปรับปรุงประสิทธิภาพ มันรู้สึกเหมือนฉันควรจะสามารถที่จะปรับปรุงประสิทธิภาพการทำงาน เมื่อถึงเวลาใดก็ตาม 99% ของวัตถุในระบบอาจมีอิทธิพลเพียงเล็กน้อยต่อวัตถุ แน่นอนว่าฉันไม่สามารถจัดเรียงวัตถุตามมวลและพิจารณาวัตถุที่ใหญ่ที่สุด 10 อันดับแรกหรือบางสิ่งบางอย่างเท่านั้นเนื่องจากแรงแตกต่างกันไปตามระยะทางมากกว่ามวล (สมการนี้อยู่ในแนวของforce = mass1 * mass2 / distance^2) ฉันคิดว่าการประมาณที่ดีคือการพิจารณาวัตถุที่ใหญ่ที่สุดและวัตถุที่อยู่ใกล้ที่สุดโดยไม่สนใจเศษหินเล็ก ๆ หลายร้อยชิ้นที่อยู่อีกด้านหนึ่งของโลกซึ่งอาจไม่ส่งผลกระทบใด ๆ ต่อวัตถุ แต่เพื่อค้นหาว่าวัตถุใดเป็นวัตถุ ที่ใกล้เคียงที่สุดฉันต้องย้ำไปที่วัตถุทั้งหมดและตำแหน่งของพวกเขาจะเปลี่ยนแปลงตลอดเวลาดังนั้นฉันจึงไม่สามารถทำได้เพียงครั้งเดียว ขณะนี้ฉันกำลังทำสิ่งนี้: private void UpdateBodies(List<GravitatingObject> bodies, GameTime gameTime) { for (int i = 0; i < bodies.Count; i++) { bodies[i].Update(i); } } //... public virtual void …

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