2017-05-11 9 views
5

कई भाषाओं में आप निम्नलिखित की तरह कुछ कर सकते हैं।स्क्वीक स्मालटाक: जबकि इस इष्टतम यह सरल खेल के लिए पर्याप्त होना चाहिए से दूर है</p> <pre><code>while true: handle events like keyboard input update game world draw screen (optional: delay execution) </code></pre> <p>: खेल पाश

आप स्क्वाक स्मॉलटॉक में यह कैसे करते हैं?

मैं कीबोर्ड इनपुट पढ़ सकता हूं और wiki.squeak.org पर वर्णित अनुसार प्रतिक्रिया करता हूं। लेकिन अगर मैं की तरह

1 to: 10 do: [ :i | game updateAndDraw ] 

कुछ पर अमल करने की कोशिश सभी घटनाओं ही कभी के बाद पाश निष्पादित किया है नियंत्रित किया जाता है।

+0

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

+0

मुझे गेम इनपुट के बिना भी अद्यतन रखने की आवश्यकता है। आप अपने दृष्टिकोण में ऐसा कैसे करेंगे? – Higemaru

उत्तर

5

मॉर्फिक पहले से ही मुख्य लूप प्रदान करता है। यह MorphicProject class>>spawnNewProcess में बताया गया है:

uiProcess := [ 
    [ world doOneCycle. Processor yield ] repeat. 
] newProcess ... 

और अगर आप doOneCycle में खुदाई आप इसे

  • (वैकल्पिक) एक देरी (interCyclePause:)
  • स्क्रीन के लिए चेक का आकार बदलने के
  • प्रक्रियाओं घटनाओं
  • करता मिलेगा
  • प्रक्रिया step विधियां
  • पुनः डिस्प्ला ys the world

आपका कोड माउस/कीबोर्ड ईवेंट हैंडलर, एनीमेशन के लिए चरण विधियों को जोड़कर और चरणों को फिर से चलाने के तरीकों को जोड़कर इन चरणों में हुक होना चाहिए। इन सभी को अपने खेल के रूप में तरीकों से होना चाहिए। आप पूरे सिस्टम में उदाहरण पा सकते हैं।

+0

यह आशाजनक लग रहा है, धन्यवाद! – Higemaru

+0

क्या आप मुझे एक उदाहरण के लिए इंगित कर सकते हैं? यह मुझे स्पष्ट नहीं है कि कहां जाता है और कौन से वर्ग उप-वर्ग में जाते हैं। – Higemaru

0

एक कार्रवाई के समय की एक निश्चित संख्या में प्रदर्शन करने के लिए:

10 timesRepeat: [game updateAndDraw] 

while अर्थ विज्ञान का उपयोग करें:

i := 5 
[i > 0] whileTrue: [ 
    i printNl. 
    i := i - 1. 
] 

जबकि अर्थ विज्ञान का उपयोग कर एक सतत पाश बनाने के लिए,

[true] whileTrue: [something do] 
+0

क्या यह मेरे प्रश्न को बिल्कुल संबोधित करता है? – Higemaru

+0

मेरी माफ़ी, शायद मैं आपकी समस्या को बिल्कुल समझ नहीं पा रहा हूं। –

0

आपका उपयोग कर मॉर्फिक इवेंट लूप का लाभ लेने में सक्षम होना चाहिए।

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