वर्तमान में मैं एक टाइल-आधारित गेम के अपने टेक पर काम कर रहा हूं (टेरारिया के बारे में सोचें, लेकिन कम कल्पनात्मक (मुझे लगता है कि यह एक शब्द है; क्षमा करें यदि यह नहीं है))।
वैसे भी, मेरे पास वर्तमान में टकराव का पता लगाने वाला काम है (कोने के मामलों के लिए भी!) जो मेरे लिए एक बड़ा कदम था। एक ब्लॉक के माध्यम से स्प्राइट नहीं चलाने को देखने के बारे में कुछ बहुत संतुष्टिदायक है। लेकिन तब मुझे बेंचमार्क करने का विचार था। बुरा विचार।
1,000 वर्ग, कोई समस्या नहीं। 10,000 वर्ग, 3 वर्णों के लिए एक प्रकार से पिछड़ गया था। 100,000 वर्ण (वास्तव में बहुत बड़ा नक्शा), 3 वर्णों के लिए अप्रयुक्त था।
मुझे वह समस्या आ रही है जहां मैं उन ब्लॉकों पर भी विचार नहीं करना चाहता जो खिलाड़ी, वर्ण, आइटम आदि से बहुत दूर हैं, लेकिन मैं उन मेमोरी को लगातार लोड नहीं करना चाहता।
यहाँ मेरा एल्गोरिथ्म अब तक, आलोचना करने के लिए स्वतंत्र है।
foreach (Block in level)
{
if (distance from block to player > a specified amount)
ignore this block;
else
{
get the intersection depth between the two bounding boxes
if (depth of intersection != Zero-vector)
{
check y size vs x size
resolve on smallest axis
}
}
}
जैसा कि आप ध्यान देंगे, जब स्तर का आकार बड़ा हो जाता है, तो इस एल्गोरिथ्म का क्रम एन ब्लॉकों द्वारा बढ़ता है। मैं उन ब्लॉकों पर भी विचार नहीं करना चाहूंगा जो खिलाड़ी के पास भी नहीं हैं।
मैं सोच रहा हूं कि शायद (0,0) (मेपविदथ, मैपहाइट) का उपयोग सूची के बजाय ब्लॉक के दोहरे-सरणी, व्यक्ति की स्थिति के आधार पर एक खतरे-क्षेत्र की गणना करते हुए जैसे, यदि खिलाड़ी की स्थिति 10 (20) है यह (0, 10) से (20, 30), या इतने पर दिखेगा।
किसी भी विचार और विचार भयानक हैं, धन्यवाद।