2010-02-08 19 views
5

में गेम इवेंट की लंबाई कैसे संभाली जाती है मुझे पता है कि मैं इस पर कैसे पहुंचना चाहता हूं लेकिन मुझे यकीन नहीं है कि यह आदर्श है या नहीं। घटना से मेरा मतलब है उदाहरण के लिए, यदि खिलाड़ी जीतता है, स्पार्क्स का एक समूह 1 सेकंड के लिए उड़ता है। मैं अपनी गेम इंजन कक्षा बनाने के बारे में सोच रहा था, फिर एक गेम इवेंट बेस क्लास बनाना जिसमें 3 शून्य कार्य, अद्यतन, ड्रा, रेंडर है। उदाहरण के लिए 3 सेकंड के लिए 100 सिक्के एकत्र करने के लिए फ़ायरफ़ोर्क्स हो सकते हैं। जिस तरह से मैं इसे कार्यान्वित करना चाहता हूं, वह मेरे गेम इंजन में एक ईवेंट वेक्टर है जहां मैं फ़ायरफ़ॉक्स एनीमेशन को धक्का दे सकता हूं। एक बार वेक्टर में कुछ धक्का दिया जाता है, गेम इवेंट [i] .render() आदि करता है ... के लिए इसे हटाने से मैंने सोचा था कि प्रत्येक घटना में फ्रेम्स में इवेंट लम्बाई हो सकती है, और प्रत्येक फ्रेम एक यूंट बढ़ जाता है, अगर यूंट लंबाई से मेल खाता है, तो यह वेक्टर से पॉप हो जाता है। मुझे बस यकीन नहीं था कि ऐसा करने का यह सबसे अच्छा तरीका था।2 डी गेम

धन्यवाद

उत्तर

1

मेरे पास प्रत्येक ईवेंट इंस्टेंस में एक विधि है जिसे आईडोन कहा जाता है, या ऐसा कुछ। फिर, प्रत्येक फ्रेम के लिए, अपने घटनाओं के माध्यम से पुनरावृति और:

if (event.isDone()) { 
    //remove the event 
} else { 
    event.update(); 
} 

कर रहा इस तरह से भविष्य में आसान परिवर्तन के लिए अनुमति देता है। सभी घटनाएं निश्चित समय के लिए नहीं रहेंगी (यह आपके गेम के लिए सच नहीं हो सकती है), कुछ मौजूदा फ्रेम के अलावा अन्य चीज़ों पर भी निर्भर हो सकते हैं।

लेकिन अपने eventBaseClass में, आप के रूप में isDone निर्धारित कर सकते हैं:

return this.endFrame >= game.currentFrame; 

और किसी भी देता है जिन्हें आप की जरूरत है ओवरराइड।

+0

मुझे यह वाकई पसंद है! धन्यवाद !, लेकिन हर समय currectframe में वृद्धि ओवरफ्लो का कारण बन सकता है? – jmasterx

+1

एक 32 बिट आर्किटेक्चर और 60 फ्रेम एक सेकेंड मानते हुए, यह 828.5 दिनों के बाद बह जाएगा: (2 ** 32)/60/60/60/24 – Ponkadoodle

+0

आह, मुझे अपने गणित पर ब्रश करना होगा :-p, धन्यवाद, मैं इसे इस तरह कार्यान्वित करता हूं, लेकिन मुझे अभी भी लगता है कि मुझे ऐसा करना चाहिए ताकि 828.5 दिनों के बाद यह 0 पर हो जाए ;-) – jmasterx

1

वहाँ कई, कई अलग अलग इस बिल्ली त्वचा के तरीके हैं। उदाहरण के लिए, आपके दिनचर्या में से एक एक बूल वापस कर सकता है यह दर्शाता है कि इस एनीमेशन को एनीमेशन कतार से पॉप किया जाना चाहिए या नहीं। मुझे यकीन नहीं है कि अपडेट, ड्रॉ और रेंडर के बीच मतभेद क्या हैं, लेकिन बिंदु के अलावा जो कुछ भी है ...

मेरी सिफारिश पढ़ना होगा। अन्य एनीमेशन इंजन क्या कर रहे हैं, इस पर पढ़ें, एक अच्छा ग्राफिक्स प्रोग्रामिंग रत्न पुस्तक ढूंढें, और पूर्ववर्ती और स्थापित कार्यान्वयन से विचारों और तकनीकों को समझें। का एक बेहतर समाधान होगा उनमें से एक, आपको बहुत दर्द और पीड़ा बचाता है।

+0

बेशक वे एक मासोचिस्ट नहीं हैं। – ChaosPandion

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