मैं iPhone पर नज़र रखने छूता है के बारे में एक त्वरित सवाल है और मैं नहीं इस पर एक निष्कर्ष पर किसी भी सुझाव आने के लिए है, तो सक्षम होने के लिए लग रहे हैं की पहचान करना/विचारों बहुत सराहना कर रहे हैं:iPhone: ट्रैकिंग/व्यक्तिगत छूता
मैं आईफोन पर छूने और पहचानने में सक्षम होना चाहते हैं, यानी। मूल रूप से प्रत्येक स्पर्श में एक प्रारंभिक स्थिति और वर्तमान/स्थानांतरित स्थिति होती है। टच एक std :: वेक्टर में संग्रहीत होते हैं और वे समाप्त होने के बाद कंटेनर से हटा दिए जाएंगे। एक बार वे स्थानांतरित होने के बाद उनकी स्थिति अपडेट की जाएगी, लेकिन मैं अभी भी ट्रैक करना चाहता हूं कि वे कहां से शुरू हुए (इशारा पहचान)।
मुझे [घटना ऑल टच] से स्पर्श मिल रहा है, बात यह है कि एनएसएससेट निरस्त नहीं है और मुझे लगता है कि पहले से ही std :: वेक्टर में संग्रहीत स्पर्शों की पहचान करने में सक्षम नहीं है और इसमें स्पर्श एनएसएसएटी (इसलिए मुझे पता है कि कौन से लोग समाप्त हो गए हैं और हटा दिए जाएंगे, या स्थानांतरित किए जाएंगे, आदि)
यहां मेरा कोड है, जो टच स्क्रीन पर केवल एक ही उंगली के साथ पूरी तरह से काम करता है, लेकिन एक से अधिक के साथ , मुझे अप्रत्याशित परिणाम मिलते हैं ...
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event
{
[self handleTouches:[event allTouches]];
}
- (void) handleTouches:(NSSet*)allTouches
{
for(int i = 0; i < (int)[allTouches count]; ++i)
{
UITouch* touch = [[allTouches allObjects] objectAtIndex:i];
NSTimeInterval timestamp = [touch timestamp];
CGPoint currentLocation = [touch locationInView:self];
CGPoint previousLocation = [touch previousLocationInView:self];
if([touch phase] == UITouchPhaseBegan)
{
Finger finger;
finger.start.x = currentLocation.x;
finger.start.y = currentLocation.y;
finger.end = finger.start;
finger.hasMoved = false;
finger.hasEnded = false;
touchScreen->AddFinger(finger);
}
else if([touch phase] == UITouchPhaseEnded || [touch phase] == UITouchPhaseCancelled)
{
Finger& finger = touchScreen->GetFingerHandle(i);
finger.hasEnded = true;
}
else if([touch phase] == UITouchPhaseMoved)
{
Finger& finger = touchScreen->GetFingerHandle(i);
finger.end.x = currentLocation.x;
finger.end.y = currentLocation.y;
finger.hasMoved = true;
}
}
touchScreen->RemoveEnded();
}
धन्यवाद!
मैं आपसे सहमत हूं। मैंने अपने कोड को उचित तरीकों से विभाजित किया। हालांकि, मेरी समस्या यह है कि मुझे ओब्जे-सी और सी ++ के बीच एक लिंक बनाने की आवश्यकता है और घटनाओं के ट्रिगर होने के बाद मेरे गेम आर्किटेक्चर को इनपुट के लिए मतदान की आवश्यकता होती है। यही कारण है कि मैं एसटीएल वेक्टर में छू रहा हूं। वैसे भी, यूआईटीच ऑब्जेक्ट के बारे में आपकी जानकारी समय के साथ लगातार चल रही है। अब, मैं ऑब्जेक्ट में पते का उपयोग विशिष्ट रूप से स्पर्श की पहचान करने के लिए कुंजी के रूप में कर रहा हूं। एक जादू की तरह काम करता है। धन्यवाद। – FlorianZ
"यदि आप स्पर्श में स्पर्श प्राप्त करते हैं, तो आप जानते हैं कि स्पर्श UITouchPhaseBegan में है" - वास्तव में? यह मेरे लिए गलत लगता है - ऐप्पल के दस्तावेज़ों से, वे विपरीत कहते हैं: मल्टी टच के साथ, छूने से एक स्पर्श बीगन किसी भी चरण में हो सकता है। – Adam
@Adam आप गलत पढ़ रहे हैं। हालांकि घटना के भीतर निहित स्पर्श दूसरे चरण में हो सकते हैं। "स्पर्श" पैरामीटर के भीतर सभी स्पर्श निर्दिष्ट चरण में होने की गारंटी देते हैं। इवेंट हैंडलिंग गाइड से: "यदि किसी कारण से आप वर्तमान मल्टीटाउच अनुक्रम में छूने में रूचि रखते हैं जो अंतिम चरण के बाद से नहीं बदला गया है या जो कि पास-इन सेट के अलावा किसी अन्य चरण में हैं, तो आप उनसे अनुरोध कर सकते हैं पास-इन UIEvent ऑब्जेक्ट से। " –