रूबी नींद या देरी एक सेकंड से कम?


149

मैं रूबी के साथ एक स्क्रिप्ट बना रहा हूं जिसे 24 फ्रेम प्रति सेकंड पर फ्रेम प्रदान करना होगा, लेकिन मुझे कमांड भेजने के बीच 1/24 सेकंड का इंतजार करना होगा। एक सेकंड से भी कम समय के लिए सोने का सबसे अच्छा तरीका क्या है?

जवाबों:


202
sleep(1.0/24.0)

जैसा कि आपके सवाल का सबसे अच्छा तरीका है: यदि आप नहीं करते हैं, तो आप नहीं कर सकते हैं, इसलिए, आप आसानी से तैयार नहीं कर सकते हैं क्योंकि प्रत्येक फ्रेम के प्रतिपादन में उतना ही समय नहीं लगता है।

आप इनमें से एक समाधान आजमा सकते हैं:

  • एक टाइमर का उपयोग करें जो ड्राइंग कोड के साथ 24 बार एक सेकंड में आग लगाता है।
  • जितने संभव हो, उतने फ्रेम बनाएं, बीते हुए समय के आधार पर मोशन बनाएं, न कि प्रति फ्रेम।

14
@Funkodebat मुझे पूरा यकीन है कि हर बुनियादी रूबी रनटाइम आपके लिए ऐसा करता है।
जॉर्ज शॉली

2
@JosephSilvashy: रूबी दुभाषिया में मेरी कोई अंतर्दृष्टि नहीं है, लेकिन रूबी मारी डिफ़ॉल्ट रूप से संस्मरण नहीं करती है। लेकिन मुझे उम्मीद है कि स्रोत कोड को बाइट कोड में परिवर्तित करते समय यह इस प्रकार का अनुकूलन करता है।
जॉर्ज शॉली

8
DRY सिद्धांत के लिए एक चर के लिए 1.0 / 24.0 मान निकालना एक अच्छा विचार है। कोड के अन्य टुकड़ों को भी उस मूल्य की आवश्यकता होगी, इसलिए आपको इसे दोहराव से बचने के लिए एक केंद्रीय स्थान पर रखना चाहिए। यदि प्रदर्शन एक साइड-इफ़ेक्ट है, तो बढ़िया है!
जेम्स वॉटकिंस

1
आपको निश्चित रूप से स्थिरांक निकालना चाहिए, और निश्चित रूप से इसे "सभी प्रदर्शन जो आप प्राप्त कर सकते हैं" कारण के साथ न करें
ब्लेक

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

101

सोने के लिए फ्लोट पास करें, जैसे sleep 0.1

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.