เกี่ยวกับ
อันนี้เป็นคำถามสองข้อในข้อเดียว ก่อนอื่นฉันกำลังมองหาวิธีในการจัดเก็บข้อมูลจำนวนมากอย่างมีประสิทธิภาพ อีกแง่มุมหนึ่งเกี่ยวข้องกับการสอบถามชุดข้อมูลและการแสดงไทล์ ให้ฉันให้พื้นหลังบางอย่างก่อน
เรากำลังสร้างเกมผู้ประกอบการหลายคนที่ใช้เบราว์เซอร์โดยใช้ห้องสมุด CraftyJS เพื่อแสดงผลเป็น Canvas ในพื้นหลังของ GUI เราใช้งาน Yii Framework บน PHP และทุกอย่างเชื่อมต่อกับเครื่องสร้างแผนที่แบบ Python และเครื่องมือสร้างเกม
นี่คือลักษณะที่แสดงแผนที่คร่าวๆเป็นครั้งแรก: http://i.imgur.com/khAXtl.png
กำลังจัดเก็บข้อมูลแผนที่
โลกของเกมจะถูกสร้างแบบสุ่มทุกครั้งที่เริ่มเกม ขนาดคือไพ่หกเหลี่ยม 100x100 สำหรับผู้เล่นแต่ละคน นั่นหมายความว่าสำหรับเกมผู้เล่นสามคนมีการสร้างไทล์ 90,000 แผ่น ขณะนี้ฉันเพิ่งสร้างอาร์เรย์ JavaScript ที่ฉันแสดงแผนที่
วิธีนี้ใช้งานได้ดีสำหรับการเรนเดอร์ แต่สำหรับการโต้ตอบใด ๆ กับแผนที่เราจำเป็นต้องเก็บผู้เล่นที่เป็นเจ้าของไทล์โครงสร้างประเภทใดที่สร้างอยู่ด้านบนสุดของมันราคาปัจจุบันและอื่น ๆ ในตอนแรกอย่างน้อยสำหรับต้นแบบเราต้องการใช้ MySQL แต่หลังจากการทดสอบบางอย่างมันไม่เร็วอย่างที่ฉันต้องการ บางทีที่เก็บวัตถุอย่าง MongoDB น่าจะเหมาะกว่าสำหรับเก็บข้อมูลไทล์แทนตาราง SQL หรืออาจเป็นอย่างอื่น?
แสดงแผนที่
ปัญหาอื่นที่ฉันเห็นคือการเคลื่อนที่ไปรอบ ๆ แผนที่ ขณะนี้ฉันกำลังสร้างเอนทิตีที่มีฝีมือสำหรับแต่ละไทล์แม้ว่าจะไม่ได้อยู่ในวิวพอร์ต สิ่งนี้ช้าเพราะแม้ว่าเจ้าเล่ห์จะแสดงเฉพาะสิ่งที่อยู่ในวิวพอร์ตมันจะเก็บและวนซ้ำผ่านไทล์ทั้งหมดในแต่ละเหตุการณ์การเรนเดอร์ สิ่งที่ฉันมีในขณะนี้คือแผนที่ที่สร้างขึ้นซึ่งวาดได้ช้ามากในการโหลดและ stutters เมื่อคุณเลื่อนไปมาตอนนี้ฉันต้องการให้เล่นได้
ความคิดแรกของฉันคือการโหลดชุดย่อยของไพ่ที่แสดงในวิวพอร์ต แต่เมื่อผู้เล่นย้ายวิวพอร์ตไปยังพื้นที่ว่างฉันจำเป็นต้องสอบถามเซิร์ฟเวอร์และรอการตอบกลับจากนั้นเท่านั้นที่จะสามารถแสดงแผนที่ได้ นี่จะเป็นเรื่องปกติในแอปพลิเคชั่นดั้งเดิม แต่มันล้าหลังในเกมบนเว็บ
วิธีในการรับประสิทธิภาพที่ราบรื่นจากแผนที่อาจทำการโหลดชุดย่อยของไพ่ที่ใหญ่กว่าลงในอาร์เรย์ javascript และใช้เป็นแคช ผู้เล่นจะมีหน้าจอ "แคช" สองสามหน้าจอและเมื่อเขาย้ายวิวพอร์ตฉันจะโหลดไทล์เพิ่มเติมไปที่ "แคช" ของ JS
ฉันกำลังมุ่งหน้าไปในทิศทางที่ถูกต้องหรือไม่? ฉันชอบที่จะได้รับข้อมูลเพิ่มเติมจากคนที่ทำสิ่งที่คล้ายกัน ฉันยังใหม่ต่อการพัฒนาเกม แต่ได้ผ่านแหล่งข้อมูลมากมายในสองสามสัปดาห์ที่ผ่านมา