2010-08-11 8 views
5

क्या कोई इस तरह के किसी प्रोग्राम को संरचित किया जा सकता है इस पर कोई प्रकाश डाल सकता है?उन जावा रेत के खेल इतने सारे कणों का ट्रैक कैसे रखते हैं?

इतने सारे कणों का ट्रैक रखने के लिए वे कौन से जावा कक्षाओं को नियोजित करेंगे और फिर टक्कर का पता लगाने जैसी चीजों के लिए उनके खिलाफ जांच करेंगे? कणों को यह जानने की जरूरत है कि वे किस कण के आगे हैं, या वे किसी भी चीज के बगल में नहीं हैं, इसलिए वे गिर सकते हैं।

Here's एक उदाहरण, आपको यह सुनिश्चित नहीं है कि रेत गेम क्या है।

+1

यह एक मजेदार व्याकुलता है। – AHungerArtist

+1

क्या आपने यह धागा देखा था? http://www.scirra.com/forum/viewtopic.php?f=3&t=6909&p=54531 –

+0

जिस साइट से आप लिंक करते हैं वह एक विकास मंच है। –

उत्तर

4

मुख्य रूप से Arrays।

  • सक्रिय रूप से चलने वाले अनाज की एक-आयामी सरणी, दो निर्देशांकों द्वारा प्रतिनिधित्व (और यदि आप गुरुत्वाकर्षण त्वरण चाहते हैं तो संभवतः एक वेग)।
  • दुनिया के निश्चित हिस्सों का प्रतिनिधित्व करने वाले बूल (या रंग) की एक द्वि-आयामी सरणी।

सबसे सरल भौतिकी मॉडल आराम से एक अनाज को हटाने के लिए है (उदाहरण के लिए जब नीचे की दुनिया की स्थिति, नीचे बाईं ओर और दाईं ओर दाईं ओर भर दी जाती है): इसके बजाय, संबंधित विश्व समन्वय भर जाता है यह गणना प्रबंधनीय रखता है। यदि विश्व समन्वय के नीचे बाएं या दाएं मुफ़्त है तो एक अनाज को स्थानांतरित करने दें। बढ़ते अनाज के बीच अनाज टकराव को अधिक verisimilitude के नुकसान के बिना अनदेखा किया जा सकता है।

(मैं काफी अधिक प्राप्त कर सकते हैं नहीं हम इन दिनों अतिरिक्त मिल गया है कितना CPU शक्ति!)

+2

Verisimilitude संभवतः अस्तित्व में सबसे अच्छा शब्द है। जवाब के लिए धन्यवाद। – Stretch

+0

@ पोंटस मैंने स्वयं HTML5 कैनवास में रेत गेम बनाने के साथ एक प्रयोग किया था। मैंने इस सवाल को देखा क्योंकि मैं जानना चाहता था कि ऐसा करने का एक और अधिक प्रभावी तरीका है, क्योंकि मैंने जो कार्यान्वयन किया वह नरक से धीमा है। अजीब बात यह है कि जावास्क्रिप्ट इतना शक्तिशाली है कि यह शून्य अंतराल के साथ 3 डी वातावरण में 1200+ ऑब्जेक्ट्स को ट्रैक कर सकता है, लेकिन एक प्रयोगात्मक गिरने वाले रेत ऐप में 200 ऑब्जेक्ट्स इसे घुटनों तक लाएगा। [यहां] (http://codesocialist.com/#/?s=b4) मेरा प्रयोग है। आप देखेंगे कि मेरे पास प्रत्येक कण के लिए एक सरणी है, और "ग्राउंड" कणों के लिए एक सरणी है। –

0

सरल संस्करण एक ढीला शुक्रवार की रात को बहुत परेशानी के बिना लागू किया जा सकता (जैसे मैं अब बस किया था)। बस अपने क्षेत्र का प्रतिनिधित्व करने वाले 2 डी सरणी (बाइट्स, इन्ट्स, जो कुछ भी) के साथ एक प्रोग्राम बनाएं। प्रत्येक टिक में, सभी तत्वों से अधिक पुनरावृति और एक जांच कार्य करें:

  • नीचे दिए गए क्षेत्र (सरणी [x] [y + 1]) खाली है, नीचे ले जाते हैं 1 स्थान (= सेट [x] [y ] खाली करने के लिए, [x] [y + 1] कब्जा करने के लिए)
  • अन्यथा, यदि [x-1] [y + 1] खाली है, तो वहां जाएं।
  • अन्यथा, यदि [x + 1] [y + 1] खाली है, तो वहां जाएं।

यह मूल बातें है। इसके बाद आपको एक अनाज की गणना 'दोहराने' जैसी जांच जोड़नी होगी (निम्नलिखित पुनरावृत्तियों पर जांच की गई नई स्थिति पर ध्वज सेट करें)।

मैंने this ट्यूटोरियल का पालन किया, यह काफी अच्छा है, बहुत लंबा नहीं है लेकिन अभी भी सामान्य नुकसान और चीजों को इंगित करता है।

संबंधित मुद्दे