2010-10-30 17 views
6

एक्शनस्क्रिप्ट 3 (और आईआईआरसी 2) में, डिस्प्ले ऑब्जेक्ट पर एक्स और वाई गुण हमेशा 0.05 के गुणक के रूप में संग्रहीत होते हैं।एएस 3 एक्स और वाई संपत्ति परिशुद्धता

तो obj.x = 66.6666 की तरह कुछ obj.x = 66.65

अधिकांश समय के रूप में ही है, यह कोई फर्क नहीं पड़ता। लेकिन कभी-कभी मैं वास्तव में धीमी गति से चलने वाली वस्तुओं के साथ समाप्त हो सकता हूं, उदाहरण के लिए प्रति सेकंड 1 पिक्सेल। 1/60 (एफपीएस) = 0.017 पिक्सेल प्रति फ्रेम। obj.x += 0.017कभी वास्तव में एक्स मान को परिवर्तित नहीं करेगा, क्योंकि यह निकटतम 0.05 तक गोल हो जाता है।
यह मुझे डिस्प्ले ऑब्जेक्ट के x & वाई गुणों को ओवरराइड करने के लिए मजबूर करता है ताकि वे गोल न हों।

मैं प्रतिपादन के लिए निकटतम अभिन्न मूल्य को गोलाकार निर्देशांक समझा सकता हूं। एक और अधिक उन्नत रेंडरर के साथ, मैं बाइनरी में प्रतिनिधित्व करने योग्य कुछ अंश को गोल करने में भी समझ सकता हूं (उदाहरण के लिए 0.25)। लेकिन 0.05 बिल्कुल बाइनरी में प्रदर्शित नहीं किया जा सकता है।

तो ऐसा क्यों हो सकता है कि फ्लैश के रचनाकारों ने निकटतम में जाने का फैसला किया .05? यह सिर्फ मेरे लिए इस तरह की मनमानी संख्या की तरह लगता है।

उत्तर

9
Wikipedia article on Twips से

:

फ्लैश आंतरिक रूप से कुछ भी twips साथ पिक्सल का उपयोग करता है की गणना करता है (या एक पिक्सेल का 1/20 )। स्प्रिट्स, मूवी क्लिप और मंच पर कोई अन्य ऑब्जेक्ट जुड़वां के साथ स्थित है। नतीजतन, (उदाहरण के लिए) sprites के समन्वय हमेशा 0.05 (यानी 1/20) के गुणक होते हैं। (यानी 1/20)।

एक वर्कअराउंड एक संख्या में समन्वय को स्टोर करना होगा, और उसके बाद इसे डिस्प्लेबोजेक्ट गुणों को असाइन करना होगा।

+0

ठीक है, लेकिन मेरा प्रश्न विज्ञापन के बारे में अधिक है .05 के गुणकों का उपयोग करने का लाभ है। – Ponkadoodle

+3

एसडब्ल्यूएफ फ़ाइल प्रारूप चश्मे के मुताबिक, "टिप्स आकार और परिशुद्धता के बीच एक अच्छा समझौता है। वे प्रति समन्वय बहुत कम बिट्स लेने के दौरान वस्तुओं की ज़ूमिंग और सटीक प्लेसमेंट के लिए उप-पिक्सेल सटीकता प्रदान करते हैं।" –

+0

क्या यह उत्तर नहीं था जिसे आप ढूंढ रहे थे? –

5

और भी बेहतर, परिशुद्धता DisplayObject के अन्य गुणों के लिए अलग है ... निम्नलिखित कोड पर विचार करें:

var tmp:Number = 1/17; 
var s:Sprite = new Sprite(); 
s.scaleX = tmp; 
s.scaleY = tmp; 
s.x = tmp; 
s.y = tmp; 
s.rotation = tmp; 
trace(tmp); 
trace(s.scaleX); 
trace(s.scaleY); 
trace(s.x); 
trace(s.y); 
trace(s.rotation); 

यह होगा उत्पादन

0.058823529411764705 
0.0588235294117647 
0.0588235294117647 
0.05 
0.05 
0.058823529411764705 

कि रोटेशन संख्या परिशुद्धता में संग्रहीत किया जाता है जिसका अर्थ है, एक्स और y twips (0.05 के एकाधिक) और स्केलएक्स और स्केल वाई को सटीक में संग्रहीत किया जाता है जो संख्या के करीब है लेकिन थोड़ा कम (शायद बिल्कुल थोड़ा कम?)

+0

यह जानना अच्छा है। चीयर्स। – Jono

+1

यह पता लगाना दुखद है, और यह हास्यास्पद है। संख्या संख्या के रूप में संग्रहित किया जाना चाहिए; यह मनमाना दौर सिर्फ स्क्रिप्टिंग समस्याओं के लिए पूछ रहा है, जैसे समन्वय को बदलने के दौरान संचयी त्रुटियों, और गंभीरता से, एक बीआईटी स्केलिंग के लिए कम सटीकता? ऐसा लगता है कि किसी ने जानबूझकर सिस्टम को तोड़ दिया।यह "ओह, यह एक संख्या है, इसलिए मैं इसके साथ गणना कर सकता हूं, सिवाय इसके कि, नहीं, आप नहीं कर सकते, क्योंकि यह चेतावनी के बिना हुड के नीचे गोल है।" – Triynko

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