2012-01-03 10 views
6

मुझे एक गेंद मिली है जो दीवारों की उछालती है। यह उछाल, सरल है मैं सिर्फ यह, (कोड स्निपेट) करगेंद तर्क उछाल

if (x - moveSpeed < 0) // Ball hit left wall 
    xVel *= -1; 

हालांकि मैं भी एक आयत जो खिलाड़ी चाल मिला है। इस पर उछाल दीवारों पर उछाल के रूप में काम करता है।

लेकिन मैं पता लगा है कि जब एक गेंद चित्र, इसकी असंभव रूप में इसी तरह आंदोलन मिला मुझे इसे फिर से सीधे ऊपर जाना बनाने के लिए। इसलिए मुझे गेंद के आने वाले कोण को प्रभावित करने के लिए आयताकार आंदोलन के संबंध में किसी प्रकार की गणना की आवश्यकता है। चलते समय आयताकार हमेशा स्थिर गति गति प्राप्त करता है। यह तस्वीर बाईं ओर चलने वाला एक आयत दिखाती है और गेंद को इसके आंदोलन के दौरान मारती है, जिसके परिणामस्वरूप 90 डिग्री कोण होता है। (जो हमेशा 9 0 नहीं होना चाहिए)।

मेरी भद्दा चित्रों के बारे में क्षमा करें मैं वे समझ बनाने की उम्मीद है। मेरा गणित जंगली है कि मुझे वास्तव में सही दिशा में धक्का क्यों चाहिए।

+4

प्रश्न यहाँ क्या है? –

+1

इस^_^ – Gabe

+1

पर अपने प्रयास का कुछ कोड प्रदान करें क्या आप वर्तमान व्यवहार की तुलना में सटीक भौतिकी या सिर्फ कुछ "बेहतर महसूस" करना चाहते हैं? – Howard

उत्तर

6

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

+0

ऐसा नहीं है कि यह मेरी दुनिया में कैसे काम करता है। –

+0

परिणामस्वरूप कोण "पैडल" की गति पर आधारित नहीं होगा? – Kekoa

+4

पोंग बजाना याद रखना, भले ही पैडल स्थिर हो, अगर गेंद अंत में बंद हो जाती है तो उस दिशा में कोण बहुत प्रभावित होता है। मुझे लगता है कि @ ट्रीब्रैंच सही है। मुझे लगता है कि प्रभाव के समय पैडल के आंदोलन ने इसे प्रभावित नहीं किया - केवल गेंद जहां हिट करती है। – hatchet

9

यहां कुछ भौतिकी (जो आपको जानने की आवश्यकता है) पर एक ट्यूटोरियल है और आपको वैक्टरों के बारे में जानने की आवश्यकता है। ट्यूटोरियल ठीक वही नहीं है जो आप खोज रहे हैं (बाउंस और कोण का प्रतिबिंब) लेकिन यह शुरुआत के लिए एक महान शुरुआत है, क्योंकि आपको अपनी परियोजना को समाप्त करने के लिए यह सब जानने की आवश्यकता होगी। Game Physics 101

आप इसे आसान तरीके से करना चाहते हैं, here C++ में कोड का वर्णन करता है कि वास्तव में कैसे अपने लिए क्या देख करना है।

संपादित


आप वास्तव में बाहर दूसरी कड़ी पहले अपने एक ट्यूटोरियल वास्तव में क्या आप जानना चाहते हैं पर जांच होनी चाहिए,। लेकिन यदि आप गेंद को चारों ओर उछालने से ज्यादा कुछ करने की सोच रहे हैं, तो कहें कि अन्य चलती वस्तुओं या कुछ ऐसा शामिल है, पहला लिंक देखें।

+2

+1 उत्कृष्ट ट्यूटोरियल – Offirmo

+1

जैसा कि पहले से ही कहा गया है, उत्कृष्ट ट्यूटोरियल! –

+0

इस टिप्पणी को लिखने के समय जेएस को कोड को स्थानांतरित कर दिया गया है, मैं अभी तक सी ++ संस्करण को खोजने में सक्षम नहीं हूं। – Funk247

1

इस कोड को दर्शाता है कि कैसे गेंद वापस या किसी अन्य दिशा में गेंद के X या Yball.headingX=-ball.headingX और ball.headingY=-ball.headingY साथ बढ़ रहा है पीछे से बाउंस करने के लिए।

अभ्यास करने के लिए सिद्धांत लाना:

/* update ball's x heading */ 
ball.x+=ball.headingX; 

/* update ball's y heading */ 
ball.y+=ball.headingY; 

/* if ball at most right of screen then reverse ball's x heading */ 
if((ball.x>PONG_SCREEN_RIGHT)) 
{ 
    ball.headingX=-ball.headingX; 

} 

/* check if ball's location at top or bottom of screen,if true reverse ball's y heading */ 
if((ball.y<PONG_SCREEN_TOP) || (ball.y>PONG_SCREEN_BOTTOM-2)) 
{ 
    ball.headingY=-ball.headingY; 
} 



/* check if ball lands on pad, if true bounce back */ 
if ((ball.y>= PlayersPad.LEFT) && (ball.y<= PlayersPad.RIGHT) && (ball.x==PlayersPad.x)) 
{ 
    ball.headingX=-ball.headingX; 
    playersScore+=10; 
} 

/* let computer track ball's movement */ 
if (ball.x>PONG_SCREEN_RIGHT-18) computersPad.y=ball.y; 


/* check if ball misses pad, if true display you missed */ 
if (ball.x<PONG_SCREEN_LEFT) 
{ 
    displayYouMissed(); 
    ball.x=ball_Default_X; 
    ball.y=ball_Default_Y; 

} 
+0

यह कोड प्रश्न का उत्तर कैसे देता है? – Howard

+0

गेंद के शीर्षक के साथ गेंद के शीर्षक को उलट करने के तरीके को दिखाकर .headingX = -ball.headingX और ball.headingY = -ball.headingY। –

4

वास्तविक भौतिक विज्ञान का अनुकरण का मार्ग जा रहे हैं (के रूप में करने के लिए @ Treebranche का जवाब है, जो कि कैसे मैं खेल की उन तरह लगता है वास्तव में काम का विरोध किया) बहुत जटिल हो सकता है। आप घर्षण, स्पिन, संपर्क की अवधि इत्यादि पर विचार कर सकते हैं। यहां कुछ लिंक हैं जो इस पर चर्चा करते हैं।

https://physics.stackexchange.com/questions/11686/finding-angular-velocity-and-regular-velocity-when-bouncing-off-a-surface-with-f

https://physics.stackexchange.com/questions/1142/is-there-a-2d-generalization-of-the-coefficient-of-restitution/

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