7

ठीक होने पर सशर्त ट्रिगर नहीं होगा, इसलिए यह शायद शौकिया प्रोग्रामर से एंड्रॉइड ग्राफिक्स के मूल उपयोग में अपना रास्ता प्रयोग करने का प्रयास करने का एक मूर्ख सवाल है, लेकिन यहां यह है।75: एंड्रॉइड

मेरे एक दोस्त की मदद करने के लिए 2 डी एंड्रॉइड ग्राफिक्स के साथ खुद को परिचित करने के लिए जो मुझे अपने खेल के लिए अपने विचार का उपयोग करना चाहता है, मैंने पोंग का एक सरल संस्करण बनाने और बनाने का फैसला किया।

Android API guides के बंद जा रहे हैं (सरल अर्थ मैं भी दोनों पैडल अभी तक कदम नहीं बना दिया है), मैं एक कस्टम दृश्य ऑब्जेक्ट (PongView) है कि 3 ShapeDrawable वस्तुओं (rectangles) के आसपास प्रयोगात्मक आवेदन का निर्माण किया। दो पैडल (मैंने उन्हें चिपकाया) और गेंद। मैंने दृश्य में MotionEventListener लागू किया और बाएं स्टिक को इसके साथ स्थानांतरित कर दिया (यानी मैंने कुछ समझ लिया :)।

इसके बाद, मैंने मुख्य गतिविधि में बनाई गई देरी Runnable का उपयोग करके गेंद को स्थानांतरित किया जो कस्टम व्यू के अंदर एक अद्यतन विधि को कॉल करता है। अद्यतन विधि में, मैंने एक टक्कर हैंडलर बनाया जो गेंद के वेक्टर (एक विशिष्ट धुरी पर) को उलट देता है जब यह स्क्रीन के किनारों या पैडल के किसी भी किनारे पर जाता है।

लेकिन इसके साथ खेलने के बाद, मैंने देखा कि मेरी टक्कर की स्थिति में से एक फायरिंग नहीं कर रही थी। गेंद बाईं तरफ या शीर्ष पर हिट होने पर बाउंसिंग के नीचे और दाहिने तरफ से गुजरती है।

यहाँ टक्कर शर्तें हैं:

//collisions 
    if ((bx + bside == getMeasuredWidth() || bx == 0) || //hit right or left of screen 
      ((bx + bside == lx || bx == lx + width) && (by < ly + height && by > ly)) || //hit left stick 
      ((bx + bside == rx || rx + width == bx) && (by < ry + height && by > ry))) { //hit right stick 
     bVectorX = -bVectorX; 
     System.out.println("bounce x"); 
    } 
    if ((by + bside == getMeasuredHeight() || by == 0) || 
      ((by + bside == ly || by == ly + height) && (bx < lx + width && bx > lx)) || 
      ((by + bside == ry || by == ry + height) && (bx < rx + width && bx > rx))) { 
     bVectorY = -bVectorY; 
     System.out.println("bounce y"); 
    } 
  • bside: गेंद वर्ग के पक्ष लंबाई (पिक्सेल)
  • चौड़ाई: पैडल की चौड़ाई
  • ऊंचाई: पैडल की ऊंचाई
  • bVectorX : x-axis
  • बीएक्स पर प्रति अद्यतन समन्वय (पिक्सेल) में परिवर्तन: गेंद के x-coordinate
  • द्वारा: गेंद की y- निर्देशांक
  • lx: बाईं चप्पू

समस्या क्षेत्र को कम करने की कोशिश कर का x- निर्देशांक, मैं इस बयान के रूप में इस बयान ने मुझे दे रहा था को छोड़कर सभी पर टिप्पणी की (x- अक्ष पर कम से कम) मुसीबत:

bx == lx + width 

मैंने महसूस किया कि जब से lx रनटाइम के दौरान कभी नहीं बदल गया है, मैं परीक्षण के लिए कच्चे मूल्य (75) में प्लग और देख सकता था कि अगर ट्रिगर करने के लिए शर्त की वजह से । ऐसा नहीं हुआ तो मैंने इसके बजाय 76 कोशिश करने का फैसला किया, और अनुमान लगाया, यह कैसे काम किया! मुझे नहीं पता क्यों, लेकिन यह काम किया। गेंद ने पिक्सेल की उस पंक्ति पर उछाल दिया। तो मैंने चर को वापस करने की कोशिश की, कोशिश कर रहा था:

bx == lx + width + 1 
    bx == lx + width - 1 

और वे दोनों काम करते थे! जब मैंने एक +/- 1 ले लिया, तो यह पैडल के माध्यम से सही होगा और दूसरी तरफ मारने से उछाल जाएगा। (क्योंकि मैं वही करता हूं वेक्टर को उलट देता है)। मैं इसे क्या करना चाहता हूं वह पैडल के दाहिने तरफ मारा जाता है और वेक्टर को उलट देता है।

मैं पता नहीं क्यों यह आपकी मदद :)

संपादित करें के लिए पहले से हो रहा है, धन्यवाद: तो मैं सशर्त परीक्षण किया और पाया कि कोड वापसी के इन दो टुकड़े सही।

if (75 == 75) { 

    int i = 75; 
    if (i == 75) { 

लेकिन यह अभी भी सच नहीं होता है।

if (bx == 75) { 

समर्थन के लिए फिर से धन्यवाद। :)

+1

+1। मैंने पहले टक्कर कोडिंग करने की कोशिश की है, लेकिन यह बहुत पहले से ही बहुत पहले है। आगे बढ़ने और इसके बजाय इसे ऊपर उठाकर इस पोस्ट का समर्थन करें। चीयर्स! –

+1

@int j अपवॉट और संपादित करने के लिए बहुत बहुत धन्यवाद, मुझे उम्मीद है कि इसे हल किया जा सकता है। मैं अपने नवीनतम सशर्त परीक्षणों के साथ एक संपादन में जोड़ सकता हूं। – BAT23

+1

आगे बढ़ें। अधिक प्रासंगिक विवरण जो आप प्रदान कर सकते हैं, बेहतर। –

उत्तर

0

आप इस हालत एक टक्कर का पता लगाने के रूप में if (bx == 75) {} यानी सटीक समानता के लिए जाँच नहीं की जानी चाहिए पूरी की जाएगी केवल अगर आपके bVectorX मूल्यों (यानी केवल पूर्णांकों कि जोड़े गए या घटाया/bx से की बहुत ही सीमित थीं हमेशा इसे 75 मानने के लिए बना देगा)।

बस <= और >= का उपयोग करें और आपको ठीक होना चाहिए।

स्क्रीन किनारों के साथ टकराव का पता लगाने के लिए समान है। विस्तृत पोस्ट के लिए

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