2009-03-15 15 views
8

के लिए टचस्क्रीन का उपयोग करना मैं एंड्रॉइड प्लेटफॉर्म के लिए अपने पहले वीडियो गेम पर रात और सप्ताहांत परियोजना के रूप में काम कर रहा हूं।खेल नियंत्रण

यह अच्छी तरह से आ रहा है, लेकिन मैं नियंत्रण संवेदनशीलता से बहुत नाखुश हूं।

इस गेम में, आप स्क्रीन पर एक ऑब्जेक्ट बाएं और दाएं स्थानांतरित करते हैं। स्क्रीन के नीचे एक प्रकार का "टचपैड" है, जहां आपकी उंगली को आराम करना चाहिए।

/-------------------------\ 
|       | 
|       | 
|       | 
|  Game Area   | 
|       | 
|       | 
|       | 
|       | 
|       | 
/-------------------------\ 
|       | 
|  Touch Area  | 
|       | 
\-------------------------/ 

मैं वर्तमान में एक राज्य चर का उपयोग कर रहा "MOVING_LEFT, MOVING_RIGHT, NOT_MOVING" धारण करने के लिए और खिलाड़ी वस्तु का स्थान प्रत्येक फ्रेम कि चर के आधार पर अद्यतन करने कर रहा हूँ।

लेकिन, मेरा कोड है कि टचस्क्रीन इनपुट पढ़ता है और सेट इस राज्य चर रहा है या तो बहुत sensative, या भी laggy, मैं इसे कैसे tweak पर निर्भर करता है:

public void doTouch (MotionEvent e) { 
    int action = e.getAction(); 

    if (action == MotionEvent.ACTION_DOWN) { 
     this.mTouchX = (int)e.getX(); 
     this.mTouchY = (int)e.getY();   
    } 
    else if (action == MotionEvent.ACTION_MOVE) { 
     if ((int)e.getX() >= this.mTouchX) { 
      this.mTouchX = (int)e.getX(); 
      this.mTouchY = (int)e.getY(); 
      if (this.TouchRect.contains(this.mTouchX, this.mTouchY)) {    
       this.mTouchDirection = MOVING_RIGHT; 
      } 
     } 
     else if ((int)e.getX() <= this.mTouchX) { 
      this.mTouchX = (int)e.getX(); 
      this.mTouchY = (int)e.getY(); 
      if (this.TouchRect.contains(this.mTouchX, this.mTouchY)) {    
       this.mTouchDirection = MOVING_LEFT; 
      } 
     } 
     else { 
      this.mTouchDirection = NOT_MOVING; 
     }    
    } 
    else if (action == MotionEvent.ACTION_UP) { 
     this.mTouchDirection = NOT_MOVING; 
    }  
} 

विचार यह है कि जब वहाँ किसी भी आंदोलन है , मैं उपयोगकर्ताओं की उंगली के पिछले स्थान की जांच करता हूं और फिर खिलाड़ी को स्थानांतरित करने के लिए किस दिशा को समझता हूं।

यह बहुत अच्छा काम नहीं करता है, मुझे लगता है कि यहां कुछ आईफोन/एंड्रॉइड डेवलपर हैं जिन्होंने टचस्क्रीन के माध्यम से अच्छे नियंत्रण कैसे किया है और कुछ सलाह दे सकते हैं।

+0

क्या आप परिभाषित कर सकते हैं कि "बहुत अच्छा काम नहीं करता है" और "बहुत लगी या बहुत संवेदनशील"। यह व्यवहार कैसे उपयोगी होगा –

+0

दो संवेदनशील माध्यम है कि मैं अपनी उंगली को एक इंच का 10 वां स्थानांतरित करता हूं और खिलाड़ी स्क्रीन पर होता है .. यह लगी है कि मुझे खिलाड़ी को स्थानांतरित करने के लिए पूरी स्क्रीन पर अपनी उंगली ले जाना है एक इंच। :) – FlySwat

उत्तर

2

आप विंडोज पर "ड्रैग आयताकार" के समान कुछ भी कोशिश कर सकते हैं। जब आप किसी चीज़ पर माउस बटन दबाए रखते हैं, तब तक माउस ड्रैग ऑपरेशन शुरू नहीं करता है जब तक कि माउस माउस-डाउन स्थान के आस-पास एक छोटे से क्षेत्र के बाहर नहीं जाता। कारण यह है कि कर्सर को क्लिक करते समय उसी पिक्सेल पर रखना बहुत मुश्किल है।

तो पहला प्रयास (int)e.getX() >= this.mTouchX + DEAD_ZONE हो सकता है और दूसरे मामले के लिए समान है, जहां DEAD_ZONE एक छोटा पूर्णांक है।

हालांकि, यह एक ही स्ट्रोक में घूमने के साथ सौदा नहीं करता है। आप उस स्थिति से केवल तभी मोड़ सकते हैं जब वर्तमान स्थिति कम से कम DEAD_ZONE पिक्सेल सही स्थिति के बाद अंतिम स्थिति के बाईं ओर होती है, और इसके विपरीत।

2

एक स्पष्ट समस्या यह है कि आप अंतिम स्पर्श के बाद से कहीं भी समय नहीं लेते हैं।

मैं सुझाव दूंगा कि आप खिलाड़ियों को -x/+x और -y/+y से एनालॉग रेंज पर वांछित आंदोलन की अभिव्यक्ति के रूप में स्पर्श करें, फिर समय पर आधारित वास्तविक आंदोलन करें।

उदा।

objectPos += objectPos + (joyPos * timeDelta * maxSpeed); 

इसलिए यदि आपके वस्तु की अधिकतम गति 10ms -1 है और खिलाड़ियों को उंगली 0.5 नियंत्रण पैड तो वस्तु 5 मीटर की दूरी हर दूसरे चलती किया जाएगा पर पर है। यदि आपका गेम 10 एफपीएस पर चल रहा है तो ऑब्जेक्ट प्रत्येक फ्रेम 0.5 मीटर की दूरी पर चलेगा।

ये आंकड़े काल्पनिक हैं, लेकिन आशा है कि आंदोलन से नियंत्रण को अलग करने और फिर समय में कारक को अलग करने की आवश्यकता प्रदर्शित होगी।

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