คำถามติดแท็ก data-structure

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

5
มีวิธีที่จะทำให้โลกมีชีวิตชีวาเช่น MMORPG ที่ปรับขนาดได้ในแนวนอนหรือไม่?
ลองจินตนาการถึงโลกที่เปิดกว้างของผู้เล่นกว่า 500+ คนที่มีการเปลี่ยนแปลงข้อมูลอย่างรวดเร็วเพียง 20 อัพเดต / ผู้เล่น / วินาที ครั้งล่าสุดที่ฉันทำงานใน MMORPG ที่คล้ายกันมันใช้ SQL ดังนั้น obvioulsy จึงไม่สามารถสืบค้น DB ได้ตลอดเวลา แต่จะโหลดผู้เล่นทุกคนจากฐานข้อมูลไปยังหน่วยความจำในฐานะวัตถุ C ++ และใช้พวกเขา นั่นคือมันปรับขนาดในแนวตั้ง เป็นไปได้ไหมที่จะทำให้เซิร์ฟเวอร์นั้นปรับขนาดได้ในแนวนอนแทน มีฐานข้อมูลที่ออกแบบมาเพื่อรองรับจำนวนการอัปเดตนั้นพร้อมกันหรือไม่?

3
ฉันจะใช้การตรวจจับการชนกันแบบ 2 มิติที่รวดเร็วและแม่นยำได้อย่างไร
ฉันตระหนักดีถึงวิธีการตรวจสอบว่ามีวัตถุสองมิติขึ้นไปชนกันหรือไม่ แต่ฉันสนใจที่จะตัดสินใจว่าจะตรวจสอบการชนกันหรือไม่ ในโครงการก่อนหน้านี้ฉันเพิ่งตรวจสอบวัตถุทุกชิ้นกับวัตถุอื่น ๆ (ฉันรู้ว่าระดับความโง่เขลา O (n ^ 2)) และมันสร้างเกมเพลย์ที่ลื่นไหลน้อยกว่า ฟอรัมต่างๆยกย่องความยิ่งใหญ่ของ Quadtrees, B-Trees และต้นไม้หรือโครงสร้างอื่น ๆ ที่คุณนึกออก โครงสร้างที่มีประสิทธิภาพที่สุดสำหรับการพิจารณาว่าควรตรวจสอบการชนกันคืออะไร?

5
โครงสร้างข้อมูลสำหรับเกมลอจิก / กฎการลดหย่อน / ชุดเบาะแสเพียงพอหรือไม่
ฉันคิดเกี่ยวกับการพัฒนาเกมลอจิกคล้ายกับPuzzle ของ Einsteinซึ่งจะมีเบาะแสที่แตกต่างกันสำหรับการเล่นเกมใหม่ทุกครั้ง โครงสร้างข้อมูลใดที่คุณใช้เพื่อจัดการหน่วยงานต่าง ๆ (สัตว์เลี้ยงสีบ้านเชื้อชาติ ฯลฯ ) กฎการหักเงิน ฯลฯ เพื่อรับประกันว่าเบาะแสที่คุณให้นั้นชี้ไปที่โซลูชันที่ไม่ซ้ำกันหรือไม่ ฉันมีเวลาที่ยากลำบากคิดเกี่ยวกับวิธีการได้รับกฎการหักเงินเพื่อเล่นพร้อมกับเบาะแสที่เป็นไปได้; ความเข้าใจใด ๆ จะได้รับการชื่นชม

3
จะเพิ่มเสียงที่ AI ศัตรูสามารถได้ยินได้อย่างไร?
ได้รับ: เกม 2D จากบนลงล่าง ไทล์จะถูกเก็บไว้ในอาร์เรย์ 2 มิติ กระเบื้องทุกแผ่นมีคุณสมบัติ - รองรับ (ดังนั้นอิฐอาจจะเป็น -50db, อากาศอาจเป็น -1) จากนี้ฉันต้องการเพิ่มมันเพื่อสร้างเสียงที่จุด x1, y1 และ "กระเพื่อม" ภาพด้านล่างแสดงความคิดเห็นได้ดีกว่า เห็นได้ชัดว่าเป้าหมายสุดท้ายคือศัตรู AI สามารถ "ได้ยิน" เสียง - แต่ถ้ากำแพงปิดกั้นเสียงจะไม่เดินทางไกล สีแดงเป็นผนังซึ่งมีการรองรับ 50db ฉันคิดว่าในเกมที่ 3 ฉันรู้สึกสับสนกับคณิตศาสตร์ อะไรจะเป็นวิธีที่ดีที่สุดในการดำเนินการนี้

3
วิธีที่เหมาะสมในการจัดการกับการทำลายของเอนทิตีเกม
ลองนึกภาพโลกของเกมที่มีการโหลดและโหลดเอนทิตีแบบไดนามิกตลอดเวลาฉันจะแสดงว่าเป็นรายการของเอนทิตี แต่สิ่งที่เกี่ยวกับการลบออก? ในขณะที่เมื่อเพิ่มฉันอาจจะผลักดันเอนทิตีใหม่ฉันอาจต้องการลบที่ใดก็ได้ในคอนเทนเนอร์ เพื่อหลีกเลี่ยงการค้นหาองค์ประกอบเพื่อค้นหาตำแหน่งสำหรับการลบฉันมีทางเลือกอะไรบ้าง ฉันคิดว่าฉันสามารถเก็บรหัสเอนทิตีว่าเป็นตำแหน่งในคอนเทนเนอร์สร้างเส้นทางสำหรับการนำออกโดยตรง แต่จะไม่สร้างความผิดปกติของการพึ่งพาซึ่งกันและกันบางประเภทหรือไม่ ฉันรู้วิธีที่ถูกต้องจะเป็นรายการเช่น List.RemoveAt (whereToRemove); แต่จะเกิดอะไรขึ้นถ้ามีเพียงนิติบุคคลเท่านั้นที่รู้ว่าควรตายเมื่อใด หรือฉันเพิ่งจะหายไปบางสิ่งบางอย่างและ list container จะรู้เมื่อวัตถุถูกทำลายและลดขนาดตัวมันเอง?

1
รูปร่าง (สี่เหลี่ยม) ทำงานในต้นไม้สี่ทิศได้อย่างไร
ฉันถูกบอกว่าต้นไม้รูปสี่เหลี่ยมเป็นโครงสร้างข้อมูลที่เหมาะสำหรับเกมของฉัน แต่ฉันมีปัญหาในการทำความเข้าใจว่ารูปร่างทำงานอย่างไรภายในต้นไม้รูปสี่เหลี่ยม ฉันทำสิ่งนี้ใน JavaScript แต่ฉันคิดว่าคำถามเหล่านี้สามารถใช้ได้กับต้นไม้สี่ต้นในภาษาใด ๆ ผมคิดว่าผมเข้าใจส่วนใหญ่วิธีการขั้นพื้นฐาน (x, y) จุดและแทรกจุดงานในต้นไม้รูปสี่เหลี่ยมและที่ฉันสามารถทำมันบนกระดาษ นี่คือJSfiddleของการทดสอบของฉันกับจุด นอกเหนือจากกรณีหนึ่งการทดสอบของฉันกับคะแนนทำงานตามที่คาดไว้ แต่ความสับสนของฉันเริ่มต้นเมื่อรูปร่างเช่นสี่เหลี่ยมมีส่วนร่วม เมื่อคุณดึงข้อมูลจากต้นไม้รูปสี่เหลี่ยมด้วยรูปร่างมันจะตรวจสอบแต่ละจุดของรูปร่างและโหนดใดที่มันตกลงไป และการแทรกรูปร่างยังทำงานได้อย่างไรเมื่อมันยอมรับพารามิเตอร์ (x, y, width, height) สำหรับแต่ละรูปร่าง มันใช้ความกว้าง / ความสูงจากจุดเริ่มต้นในการคำนวณจุดมุมอื่น ๆ ซึ่งจะถูกแจกจ่ายไปยังโหนดที่เหมาะสม? หากรูปร่างที่แทรกเข้าไปมีสี่โหนดข้อมูลของรูปร่างนั้นจะถูกบันทึกลงในทั้งสี่โหนดหรือไม่ และเมื่อวิธีการดึงข้อมูลยอมรับรูปร่างเป็นพารามิเตอร์ (x, y, ความกว้างความสูง) สิ่งที่เกิดขึ้นจริง? มันเป็นครั้งแรกหรือไม่ที่จะเห็นว่ารูปร่างของโหนดนั้นจะขยายไปถึงถ้ามันถูกแทรกเข้าไปแล้วดึงวัตถุทั้งหมดของโหนดเหล่านั้นหรือไม่? ฉันมีJSfiddle ทำงานกับรูปร่างแต่ฉันสับสนอย่างมากกับผลลัพธ์ของการทดสอบของฉัน ฉันได้รับวัตถุที่ซ้ำกันที่ถูกส่งคืน! ตัวอย่างเช่นสี่เหลี่ยมจัตุรัสสีแดงนั้นเทียบเท่ากับพารามิเตอร์ที่ฉันกำลังเข้าสู่วิธีการดึงของฉัน ฉันคิดว่าเนื่องจากสี่เหลี่ยมสีแดงนี้ครอบคลุมทั้งสี่โหนดมันควรส่งคืนวัตถุทุกชิ้นในต้นไม้รูปสี่เหลี่ยม! แต่มันไม่ได้และฉันมีปัญหาในการหาเหตุผลเข้าข้างตนเองว่ามันจะกลับมา ฉันมีการทดสอบอื่น ๆ อีกจำนวนมากที่แสดงความคิดเห็นอยู่ในขณะนี้ แต่คุณสามารถยกเลิกการแสดงความคิดเห็นและเรียกใช้พวกเขาเพื่อดูผลลัพธ์ที่สับสนมากขึ้น! ถ้าฉันต้องการส่งคืนคะแนนทั้งหมดในต้นไม้รูปสี่เหลี่ยมฉันจะทำอย่างไร วิธีการดึงข้อมูลโดยใช้รูปร่างขนาดทั้งหมดของขอบเขต? ตัวอย่างเช่นดึง (0, 0, canvas.width, canvas.height)? ห้องสมุด …

2
โครงสร้างข้อมูลในเกมที่เก่ากว่า
ฉันอยากรู้เกี่ยวกับโครงสร้างข้อมูลที่ใช้ในการเขียนโปรแกรมเกมที่เก่ากว่าเช่น Super Mario Brothers สำหรับ NES และ Super Mario World สำหรับ SNES ความเข้าใจของฉันคือเกมของช่วงเวลานี้ถูกเขียนขึ้นในการชุมนุม โปรแกรมเมอร์กำหนดหรือใช้โครงสร้างข้อมูลใด ๆ หรือไม่? ตัวอย่างเช่น: เมื่อกลุ่มของเหรียญปรากฏบนหน้าจอวิธีที่พวกเขาเก็บไว้ได้อย่างไร โปรแกรมเมอร์ไม่ได้ใช้อาร์เรย์หรือไม่ หรือบางทีพวกเขามีรายการเชื่อมโยง? ไชโย! แก้ไข : ฉันสนใจวิธีการต่าง ๆ ... ไม่จำเป็นต้องเป็นแนวทางสากล แก้ไข 2 : ในบางเกมของฉันฉันใช้วิธี (อาจไม่ดี) ต่อคอลเล็กชันและฉันต้องการทราบว่าเกมเก่า ๆ เกมใดใช้แนวทางที่คล้ายกันหรือไม่ ฉันชอบที่จะทำต่อไปนี้: // statically allocated arrays (max number of coins is 4) int coinsXs[4] = {0, …

1
ทำไมไทล์ 16 × 16 พิกเซลถึงเป็นธรรมดา
มีเหตุผลที่ดีสำหรับกระเบื้อง (เช่นMinecraft ) เป็น 16x16 หรือไม่? ฉันมีความรู้สึกว่ามันเกี่ยวข้องกับเลขฐานสองเพราะ 16 อยู่10000ในเลขฐานสอง แต่นั่นอาจเป็นเรื่องบังเอิญ ฉันต้องการที่จะรู้ว่าเป็นเพราะฉันต้องการที่จะสร้างเกมที่มีการสร้างภูมิประเทศและฉันต้องการที่จะรู้ว่ากระเบื้องของฉันควรจะใหญ่แค่ไหนหรือถ้ามันไม่สำคัญ

2
ฉันควรแสดงจุดและขนาดเป็นโครงสร้างเมื่อใด
ในฐานะที่เป็นส่วนหนึ่งของกรอบการพัฒนาเกม Ruby 2D ที่เรียบง่ายวัตถุในเกมของฉันมีตำแหน่ง (ค่า x และ y) และขนาด (ความกว้างและความสูง) class MyGameObject attr_accessor :x attr_accessor :y attr_accessor :width attr_accessor :height ... อีกวิธีที่ฉันเห็นคือรักษาตำแหน่งเป็นPointโครงสร้างและขนาดเป็นSizeโครงสร้าง: Point = Struct.new(:x, :y) Size = Struct.new(:width,:height) class MyGameObject attr_accessor :position # Point instance attr_accessor :size # Size instance ... เฟรมเวิร์กบางตัวใช้เฟรมก่อน (ฉันคิดว่า GDX, Gosu ... ) อื่น ๆ …

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

3
เหตุใดฉันจึงไม่ได้รับบูลบรรจุและปรับให้เป็นบัฟเฟอร์คงที่ D3D
เอาล่ะฉันมีเวลายากที่จะได้รับการบรรจุและจัดแนวเป็นบัฟเฟอร์คงที่ hlsl และฉันไม่แน่ใจว่าทำไม นี่คือบัฟเฟอร์ใน hlsl cbuffer MaterialBuffer : register(b1) { float3 materialDiffuseAlbedo; float materialSpecularExponent; float3 materialSpecularAlbedo; bool isTextured; }; และนี่คือ c ++ struct GeometryBufferPass_MaterialBuffer { XMFLOAT3 diffuse; float specularExponent; XMFLOAT3 specular; bool isTextured; }; ฉันพยายามย้ายบูลและขยายโครงสร้างในทุก ๆ ด้านโดยไม่มีโชค วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

2
ในเกมที่อิงแบบสองมิติ NPC และไทล์ควรอ้างอิงถึงกันอย่างไร
ฉันกำลังสร้างเอนจินไทล์สำหรับเกม 2D จากบนลงล่าง โดยทั่วไปโลกจะประกอบไปด้วยตารางของกระเบื้อง ตอนนี้ฉันต้องการใส่ NPCs ที่สามารถเคลื่อนที่บนแผนที่ได้ คุณคิดว่าอะไรดีที่สุด: แต่ละไทล์มีตัวชี้ไปยัง NPC ที่อยู่บนไทล์ของมันหรือตัวชี้ NULL มีรายชื่อของ NPC และพวกเขามีพิกัดของไทล์ที่พวกเขาอยู่ อื่น ๆ อีก? ฉันคิด เร็วกว่าสำหรับการตรวจจับการชน แต่จะใช้พื้นที่หน่วยความจำมากขึ้นและช้าลงเพื่อค้นหา NPC ทั้งหมดในแผนที่ ตรงข้าม

1
การแสดงระดับ / โครงสร้างข้อมูลที่เหมาะสมสำหรับเกมแพลต 2D จากเกม?
ฉันกำลังจะเขียนโปรแกรม Mario ใน Java ฉันกำลังคิดเกี่ยวกับการเป็นตัวแทน 2 ครั้ง / โครงสร้างข้อมูลสำหรับระดับ แต่ฉันไม่แน่ใจว่าควรเลือกแบบใด: อาร์เรย์จำนวนเต็ม 2D ควอดทรีเพื่อแบ่งระดับเป็นชิ้น ๆ อะไรคือข้อดีและข้อเสีย?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.