2012-06-17 15 views
5

अरे मुझे पता है कि इसके बारे में पहले से ही कुछ पोस्ट हैं - फिर भी मुझे अभी भी समस्या के लिए पर्याप्त उत्तर नहीं मिल रहा है।टाइमस्टैम्प और स्वाइप की गणना

कोको और आईओएस के लिए बस नया, मैं अपना पहला आईओएस गेम विकसित करने के बीच में हूं। इस खेल में मैं उपयोगकर्ता के स्वाइप की गति की गणना करने में सक्षम होना चाहता हूं। मैं कड़ी चोट गति में लगातार स्पर्श के बीच की दूरी को खोजने में कोई परेशानी हो रही है, लेकिन समय के touchesMoved: में

  • छूता के बीच गुजरे का निर्धारण करने में कठिनाई हो रही हूँ मैं वर्तमान स्पर्श के साथ गणना करने के साथ-साथ का ट्रैक रखने एक UITouch

  • touchesEnded: में

    के रूप में पिछले पहले से रिकॉर्ड स्पर्श मैं अब कड़ी चोट की गति की गणना करना चाहते हैं, लेकिन जब मैं की तरह कुछ कार्य करें:

    डबल timeDelay = event.timestamp - self.previousTouch.timestamp;

यह हमेशा 0.

हालांकि देता है, जीसीसी का उपयोग कर रहा है कि दो timestamps वास्तव में ही नहीं हैं देखने के लिए सक्षम हूँ। इसके अतिरिक्त, निरीक्षण के बाद मैंने देखा कि इन घटनाओं के लिए एनएसटीइम अंतराल मूल्य ~ 10^(- 300) की परिमाण पर थे। यह अजीब लगता है क्योंकि एक एनएसटीइमइंटरवाल को सिस्टम शुरू होने के बाद सेकंड की रिपोर्ट करना चाहिए?

मैंने पिछले स्पर्श के एनएसडीएटी का ट्रैक रखने का प्रयास किया है और इसे [NSDate timeIntervalSinceNow] के साथ संयोजन के साथ उपयोग किया है। इससे भी अजनबी परिणाम सामने आए, हर बार 6 के आसपास मूल्य लौटा। दोबारा, चूंकि टाइमर इंटरवलसेंस नाउ NSTimeInterval लौटाता है, यह मान बहुत अजीब है।

मुझे टाइमस्टैम्प के बारे में क्या समझ नहीं रहा है? आयोजन? इस पर किसी भी मदद की सराहना की जाएगी! अपने समय के लिए धन्यवाद

कुछ समर्थन कोड:

sampleController.h में:

@property(nonatomic) UITouch* previousTouch 
@property(nonatomic) UITouch* currentTouch 

sampleController.m में:

@synthesize previousTouch = _previousTouch, currentTouch = _currentTouch; 
... 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
     self.currentTouch = [[event allTouches] anyObject]; 
     // do stuff with currentTouch 
} 
... 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
     self.previousTouch = self.currentTouch; 
     self.currentTouch = [[event allTouches] anyObject]; 
     // do stuff with currentTouch 
} 
... 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
     float distanceMoved = [self.touch locationInView:self.playView].x - 
       [self.touch previousLocationInView:self.playView].x; 
     // attempt 1 
     double timeElapsed = self.currentTouch.timestamp - self.previousTouch.timestamp; 

     // attempt 2 
     double timeElapsed = event.timestamp - self.previousTouch.timestamp; 

     // do stuff with distanceMoved and timeDelay 
} 
+0

iOS5 के लिए इस है 'UIGestureRecognizer' में अंतर्निहित कार्यक्षमता। –

उत्तर

4

UIPanGestureRecognizer एक velocityInView proerty है कि आप कर सकते हैं उपयोग का पता लगाएं। डॉक्स here

इसके अलावा आपको यह रे वेंडरलिच tutorial जानकारीपूर्ण मिल सकता है।

(और यह एक स्मैक नहीं है -। लेकिन कुछ गूगल खोजों बात की इस तरह की सामग्री का भार बारी बचाता है सभी बाल खींच बड़ा जीवन सवाल ;-)

+0

मुझे UIPanGestureRecognizer से अवगत है लेकिन मुझे इसके साथ भी परेशानी हो रही है। शायद मैं जिस पर काम कर रहा हूं उस पर कुछ और पृष्ठभूमि; यह खेल एक ईंट-बीकर किस्म का है, और इस तरह मैं लगातार स्पर्श का उपयोग कर रहा हूंगेगान: और स्पर्श करता है: पैडल ect की स्थिति को अद्यतन करने के लिए। मैंने लक्ष्य की क्रिया चयनकर्ता विधि के अंदर [प्रेषक velocityInView:] का उपयोग करके स्वाइपिंग की गति को पूरी तरह अपडेट करने के लिए UIPanGestureRecognizer का उपयोग करने का प्रयास किया है।हालांकि, ऐसा करने पर, जब भी एक यूआईपीएनजेस्टर पहचाना जाता था, तो यह छूने में बाधा डालता है: कार्यक्षमता कुछ कैसे। सलाह? –

+0

क्षमा करें, cancelsTouchesInView संपत्ति के बारे में पता चला। अब पूरी तरह से काम करता है। –

+0

खुश है कि आप इसे हल किया गया है! –

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