سؤال

أقوم بتطوير لعبة للويب.ستكون خريطة هذه اللعبة 2000 كيلومتر في 2000 كيلومتر على الأقل.أريد أن أكون قادرًا على تشفير الارتفاع ونوع التضاريس عند مستوى معين من التفاصيل - 100 م × 100 م على سبيل المثال.

بالنسبة لخريطة 2000 كيلومتر في 2000 كيلومتر، يتم تخزين هذه المعلومات في 100 متر2 تعني المجموعات 20000 × 20000 عنصر أو إجمالي 400000000 سجل في قاعدة البيانات.

هل هناك طريقة أخرى لتخزين هذا النوع من المعلومات؟

معلومات اكثر

لن يتم عرض الخريطة نفسها بالكامل على الإطلاق.سيتم نقل الوحدات على الخريطة بطريقة تعتمد على الأدوار وسيحصل اللاعبون على تعليقات حول مكان تواجدهم وكيف تبدو المنطقة المحلية.سوف تملي التضاريس السرعة وحظر الحركة.

أعتقد أنني أحاول أن أقول أنه سيتم استخدام الخريطة للعبة وليس بالضرورة لأغراض رسومية أو عرضية.

هل كانت مفيدة؟

المحلول

سأتعامل مع الأمر بشكل مختلف، من خلال فصل نوع التضاريس والارتفاع.

  1. أفترض أن نوع التضاريس لا يتغير بنفس سرعة الارتفاع - فمن المحتمل أن تكون هناك قطاعات من نفس النوع من التضاريس تمتد لفترة أطول بكثير من أدنى مستوى من التفاصيل.سأقوم بتعيين هذه القطاعات في سجلات قاعدة البيانات أو في نوع من جداول التجزئة، اعتمادًا على الأداء والذاكرة والمتطلبات الأخرى.

  2. الارتفاع الذي أفترضه هو شبه مستمر، لأنه يتغير تدريجيًا في معظم الأحيان.سأحاول تعيين القيم في مجموعة من الوظائف المستمرة (مجموعات مختلفة بين الأجزاء غير المستمرة، كما هو الحال في التغيير المفاجئ في الارتفاع).بالنسبة لأي مجموعة من الإحداثيات التي تكون تضاريسها هي نفس الارتفاع أو يمكن وصفها بواسطة وظيفة بسيطة، تحتاج فقط إلى تحديد النطاق الذي تغطيه هذه الوظيفة.من المفترض أن يقلل هذا كثيرًا من كمية المعلومات التي تحتاج إلى تسجيلها لوصف الارتفاع عند كل نقطة في التضاريس.

لذا، سأقوم بشكل أساسي بتقسيم الخريطة إلى قطاعات مختلفة تتكون من نطاقات (x,y)، مرة لنوع التضاريس ومرة ​​لارتفاع التضاريس، وإنشاء جدول تجزئة لكل منها يمكنه إرجاع القيمة المناسبة حسب الحاجة.

نصائح أخرى

وذلك يعتمد على الطريقة التي تريد أن تولد التضاريس الخاصة بك. على سبيل المثال، هل يمكن أن تولد من الناحية الإجرائية كل شيء (باستخدام الاستيفاء من دقة منخفضة التضاريس / ارتفاع خريطة - المخزنة على اثنين "الصور النقطية" - مع الاستيفاء عشوائي المصنف من احداثيات س ص لضمان التضاريس لم يتحول)، واستخدام الحد الأدنى من التخزين . إذا أردت مناطق التضاريس التي تم تعريفها تماما، هل يمكن تخزين هذه على حدة واستخدامها عند الاقتضاء، وتوليد عشوائيا بقية).

إذا كنت تريد التضاريس محددة تماما، ثم وأنت تسير في حاجة إلى أن ننظر إلى نوع من الضغط / تدفق تقنية لسحب فقط التضاريس كنت مهتما حاليا.

إذا كنت تريد هذا النوع من التفاصيل التي كنت تبحث عنها، ثم ليس هناك طريقة واضحة للقيام بذلك.

هل يمكن أن تحاول المويجات 2-الأبعاد تحويل، ولكن هذا معقد جدا. شيء من هذا القبيل تحويل فورييه أن تفعل بشكل جيد جدا. بالاضافة الى ذلك، وربما كنت لن يذهب حول تخزين التضاريس وسيلة-سجل واحد لكل قطعة من الأراضي. إنه من المنطقي أن يكون نوعا من حقل قاعدة البيانات التي يمكن تخزين مصفوفة المشفرة.

وأعتقد أن الحل المعتاد هو لكسر النطاق الخاص بك في "البلاط" من الأحجام يمكن التحكم فيها. سيكون لديك لإضافة قليلا من المنطق لتحميل البلاط المناسبة في أي وقت من الأوقات، ولكن لا بأس بها.

ويجب أن لا تحتاج إلى الوصول إلى جميع تلك المعلومات في وقت واحد - حتى لو احتلت كل 100m2 دلو بكسل واحد على الشاشة، لا شاشة وأنا أعلم من يمكن أن تظهر من 20K العاشر من 20K بكسل في آن واحد

وأيضا، وأنا لن تستخدم قاعدة بيانات - النظر في رسم الخرائط ارتفاع - على نحو فعال باستخدام صورة بالأبيض والأسود التي تمثل القيم مرتفعات بكسل

وحظا سعيدا!

وهذا سوف يكون الكثير بفظاعة المعلومات بغض النظر عن الطريقة التي ننظر إليها. 400000000 خلايا الشبكة سوف تجور.

وأرى طريقتين لتدور هذه. أولا، لأنها هي لعبة على شبكة الإنترنت، فإنك قد تكون قادرة على الحصول على الملقم مع HDD بحجم لائق وتخزين السجلات 400M فيه تماما كما تفعل عادة. أو على الأرجح خلق نوعا من آلية التخزين الخاصة بك لتحقيق الكفاءة. ثم عملتم فقط لإيجاد طريقة للوصول إلى البيانات بشكل فعال، والتي يمكن أن تقوم به مع الأخذ بعين الاعتبار حقيقة أن كنت يثير الشكوك سوف تحتاج إلى استخدام كل ذلك في آن واحد. ؛)

والطريقة الأخرى ستكون نوعا من الضغط. عليك أن تكون حذرا مع هذا على الرغم من. ومعظم خوارزميات الضغط خارج المربع، لا يسمح لك لضغط مكان التعسفي في الدفق. ولعل بيانات التضاريس لديه بعض الأنماط في أنه يمكنك استخدام؟ أشك في أنها سوف تكون عشوائية تماما. الأرجح أتوقع مناطق واسعة مع نفس البيانات. ولعل تلك يمكن المشفرة على هذا النحو؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top