2011-10-24 8 views
6
पर ऑफसेट

वहाँ इस बारे में तो यहां लगभग कोई जानकारी नहीं है, मेरी समस्या है:आईओएस छूता (ऑटो) आईपैड

मैं एक 2 खिलाड़ी पर काम कर रहा हूँ ipad खेल और खिलाड़ी 'eachother से भर बैठ' जो विपरीत तरफ है, बटनों को टैप करने में कठिनाई होती है ... क्योंकि ऐसा प्रतीत होता है कि ऐप्पल डिवाइस अभिविन्यास (जो नियमित उपयोग या मुख्य प्लेयर के लिए बहुत अच्छा है) के आधार पर स्पर्श को स्वतः बदल देता है। क्या इसे रीसेट करने या आईपैड को ऐसा करने का कोई तरीका नहीं है? (Btw iPhone करता है यह भी)

यह सब मैंने पाया है: को देखते हुए यह स्पष्ट विसंगति, मैं करने के लिए तय कर लिया है तो बस इतना है कि वहाँ के लिए एक क्षेत्र है भागों चलती '' सीमा 'खोलने यह धोखा उपयोगकर्ता के हिस्से के नीचे हिट करने के लिए उपयोगकर्ता। पूरी तरह से, उपयोगकर्ता इसके ऊपर किसी ऑब्जेक्ट के नीचे हिट लगते हैं - इसलिए आईओएस के कारण स्थानांतरण को ध्यान में न रखें।

तो offsetting को रोकने के लिए कोई आसान तरीका नहीं है अगर, विपरीत खिलाड़ी के लिए प्रत्येक UIView (या उपवर्ग के) सीमा शिफ्ट करने के लिए एकमात्र समाधान है? या यह भी सही है?

किसी भी उत्तर की सराहना की।

उत्तर

3

संपादित करें: ओमजी आप लोग आखिरकार मुझे एक रास्ता मिला! मैंने UIView का उप-वर्ग बनाया, और मेरा गेम व्यू बनाया (जिसमें सभी यूआईएसक्रोल व्यू, UIButtons, आदि हैं) उस सबक्लास का उपयोग करते हैं। और फिर यह केवल कोड मैं उपवर्ग को जोड़ा गया था:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGPoint touchSpot = point; 
    if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad Simulator"] && touchSpot.y < 512) 
    { 
     touchSpot = CGPointMake(touchSpot.x, touchSpot.y+10); 
    } 

    UIView *hitView = [super hitTest:touchSpot withEvent:event]; 

    if (hitView == self) 
     return self; // you can return nil here if you want touches to go through this view (ie transparent space in a HUD overlay or w/e) 

    return hitView; 
} 

अभी तक यह अच्छी तरह से काम किया है ... व्यक्ति विपरीत छोर पर बैठे बस "घर" की ओर प्लेयर की तरह अच्छा स्पर्श प्रतिक्रिया है । इस दृश्य हालांकि ... सब कुछ है कि विधि के माध्यम से जाना होगा की चोटी पर देखा गया पेश से सावधान रहें ...

पुरानी समाधान (इससे पहले कि मैं कि पता चला ^):

खैर, अभी मेरी समाधान है uigesturerecognizer subclass करने के लिए, किसी भी स्पर्श (यानी पहचानकर्ता पर कोई बाधा) आगे, तो इसे मेरे खेल के दृश्य में जोड़ें। फिर किसी भी स्पर्श का जवाब देने वाली विधि केवल तब समाप्त होती है जब राज्य समाप्त हो जाता है, और यदि ऐसा है, तो यह देखने के लिए कि प्रत्येक स्पर्श को छेड़छाड़ करने के लिए यह प्रत्येक सबव्यू (कई नहीं) के माध्यम से लूप तक पहुंच जाता है। साथ ही, विपरीत खिलाड़ी के लिए यह आयत को थोड़ा सा ऑफसेट करता है (प्रत्येक सबव्यू के लिए)।

मैं देखता हूं कि मुझे एक और अधिक कुशल तरीका मिल सकता है ... लेकिन अभी तक ठीक है।

मैं अपने गेम को एक यूवीव सबक्लास और ओवरराइड टचस्बेगन/ले जाया/समाप्त कर सकता था लेकिन मुझे पहले से ही यह सब बाहर रखा गया था, इसलिए मैं पहचानकर्ता के साथ गया (इस प्रकार यूवीव को उपclass नहीं कर रहा)।

3

हां, टच ऑफसेट मौजूद है, इसका आकार दस्तावेज नहीं है और इसे रद्द नहीं किया जा सकता है (कम से कम, सार्वजनिक एपीआई के साथ)।

आपको ऑफसेट को खुद को रिवर्स-इंजीनियर करना होगा। मैं सिर्फ एक छोटा सर्कल प्रदर्शित करूंगा जहां यूआईकिट का कहना है कि स्पर्श है, और फिर इसे परीक्षण और त्रुटि से समायोजित करें। जब आपके पास ऑफसेट होता है, तो आप इवेंट हैंडलर में केवल विपरीत प्लेयर के लिए मैन्युअल रूप से इसे लागू कर सकते हैं (-2 * ऑफ़सेट)।

मैं नहीं बता सकता कि यह कितना सही होगा महसूस करें, आपको थोड़ा प्रयोग करना होगा।

+0

स्पर्श के लिए सही मैं खुद को ट्रैक करता हूं, मैं ऐसा कर सकता हूं, लेकिन UIButtons या टेबलव्यू पर सामान के बारे में क्या है जो मेरे नियंत्रण में उतना अधिक नहीं है? वे पहले से ही एक मिस्ड टच बाहर बुनाई।इसके लिए कोई सुझाव? धन्यवाद। – cclogg

+0

सभी स्पर्शों को प्रभावित करने के लिए आपको UIWindow/UIAplication स्तर पर 'sendEvent:' को ओवरराइड करना होगा, लेकिन आप यूआईटीओच को किसी भी तरह संशोधित नहीं कर सकते हैं। यहां समस्या यह है कि ऐप्पल की स्पर्श समायोजन मशीनरी को "ठीक करने" के लिए (जो ड्राइवर स्तर पर सबसे अधिक संभावना होती है) * हर जगह * आपको यहां वर्णित निजी एपीआई का उपयोग करना होगा: http://cocoawithlove.com/2008/10/ सिंथेसाइजिंग-टच-इवेंट-ऑन-iphone.html, लेकिन मैं इसकी अनुशंसा नहीं करता क्योंकि यह एक * बहुत, बहुत * खतरनाक हैक है। – Costique

+0

डार ठीक है। खैर, मैं एक दृश्य के बाउंड में देख रहा हूं ... मुझे आश्चर्य है कि क्या मैं क्लिपिंग बंद कर सकता हूं, फिर -10 पिक्सेल द्वारा दृश्य की सीमा को ऑफ़सेट कर सकता है, और उसके बाद +10 पिक्सल (दूसरे प्लेयर के लिए फ्रेम) द्वारा दृश्य के फ्रेम को ऑफ़सेट कर सकता है। हालांकि किसी टक्कर/स्थिति की सामग्री को मुझे फ्रेम पर -10 पिक्सेल की जांच करना याद रखना होगा। – cclogg

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