confusing myself with pointers and references, c++ (Getting mouse coords from WinAPI) -
मेरे पास एक वर्ग है:
वर्ग माउस {सार्वजनिक: int x; Int y; शून्य माउस मैव (पूर्णांक x, इंट y); माउस (); }; मैं इसे अपने windows.cpp में हेडर फ़ाइल के रूप में शामिल करता हूं जिसमें WndProc और WinMain फ़ंक्शन शामिल हैं I बस इसके नीचे मैं अपने माउस का एक स्थिर उदाहरण घोषित करता हूं:
# "mouse.h" #include "Game.h" स्थिर माउस माउस; मेरे माउस के तरीके इस तरह दिखते हैं: # "माऊस.h" को रिक्त करें माउस :: माउस मैव (int x, int y) {this- & Gt; x = x; यह- & gt; y = y; } मेरे WndProc पर मैं WM_MOUSEMOUSE प्रसंस्करण और x और y मानों को पारित कर रहा हूँ (जो मेरे माउसमॉव फ़ंक्शन के माध्यम से सही मान हैं:
केस WM_MOUSEMOVE : {Int x = (short) लोवॉर्ड (lParam); int y = (संक्षिप्त) HIWORD (lParam); bool leftButtonDown = wParam & MK_LBUTTON; bool rightButtonDown = wParam & MK_RBUTTON; माउस। MouseMove (x, y);} ब्रेक; मेरा माउसमॉव फ़ंक्शन तब से चलाता है और इस-> एक्स से एक्स को सफलतापूर्वक और y मान के साथ सेट करता है। यह सब ... किया गया है।
अब, मेरी खिड़कियां लूप में मैं अपना गेम (theGame.Go) चला रहा हूं:
गेम theGame = गेम (एचडब्ल्यूएनडी); एमएसजी msg; ज़ीरोममोरी (और msg, आकारफ (msg)) ; जबकि (msg.message! = WM_QUIT) {यदि (पीकेएमसेज (& msg, NULL, 0U, 0 यू, पीएमआईएमओव्व्व)) {अनुवाद संदेश (& amp; संदेश); डिस्पैचमेल (& amp; msg);} और {theGame.Go ( );}} मेरा गेम हैडर इस तरह दिखता है:
# "mouse.h" वर्ग गेम को शामिल करें {सार्वजनिक: खेल (एचडब्ल्यूडब्ल्यूड एचडब्ल्यूएनड); ~ गेम (); वीओ मुझे जाना था(); शून्य कंपोजफ़्रेम (); एलपीडी 3 डीएक्सपीआरआईटीईआरटी; एलपीडीईआरईटी 3 डीएक्वायरर 9 जीटीएक्चर; D3DXVECTOR3 pos; निजी: डी 3 डी ग्राफिक्स जीएफएक्स; }; मेरा गेम निर्माण ऐसा दिखता है:
गेम :: गेम (एचडब्ल्यूएनडी एचडब्ल्यूएनड): जीएफएक्स (एचडब्ल्यूएनड) {हरेसल्ट परिणाम; प्रेत = नल; परिणाम = D3DXCreateSprite (gfx.d3dDevice, और sprite); जोर दें (! FAILED (परिणाम)); जीटीकेसर = नल; परिणाम = डी 3 डीएक्सक्रेटिएटफ्रेमफाइल (gfx.d3dDevice, "छवियाँ / वर्ण 00.png", और जीटीएक्स्ट); जोर दें (! FAILED (परिणाम)); Gfx.d3dDevice-> SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE); }; गेम ऑब्जेक्ट को कोई भी पता नहीं है कि मेरे windows.cpp में घोषित माउस ऑब्जेक्ट वास्तव में इस तथ्य की परवाह किए बिना मौजूद है कि मैंने इसे विश्व स्तर पर घोषित किया है। इसलिए मैं खुद को सोचता हूं, मुझे अपने गेम ऑब्जेक्ट के संदर्भ में माउस ऑब्जेक्ट पास करना होगा मैं इस तरह से विंडोज़ पाश को संशोधित करके शुरू करता हूँ:
गेम theGame = गेम (एचडब्ल्यूएनड, और माउस); MSG msg; ज़िरोमेरी (& amp; msg, आकार (msg)); जबकि (msg.message! = WM_QUIT) {यदि (पीकमासेज (& msg, NULL, 0U, 0 यू, पीएमआईएमओव्व्व)) {अनुवाद संदेश (& amp; msg); डिस्पैचमेल (& amp; msg); } और {theGame.Go (); }} अब मैं अपने Game.h वर्ग में कुछ पैरामीटर जोड़ता हूं ताकि मेरे पास मेमोरी का एक संदर्भ हो और इसके बाद से * mouse.x प्राप्त कर सकें ...: < / P>
क्लास गेम {सार्वजनिक: खेल (एचडब्ल्यूएनडी एचडब्ल्यूडंड, माउस एंड माउस); ... मैं अपनी खिड़की लूप को देखने के लिए वापस जाता हूं और मेरे कॉल के तहत एक चक्कर मारता है:
गेम theGame = गेम (hWnd, & amp; माउस); यह बताता है कि:
6 इंटेलियेंस: निर्माता का कोई उदाहरण "गेम :: गेम" तर्क सूची तर्क प्रकार से मेल खाता है: (एचडब्ल्यूएनडी, माउस *) C: \ Users \ James \ Documents \ Visual Studio 2012 \ Projects \ Game \ Game \ Windows.cpp 75 17 गेम मुझे नहीं मिलता? पृथ्वी पर कैसे मैं अपने माउस का एक वैश्विक उदाहरण बदलता हूं और इसे मेरे भगवान लानत के भीतर से कॉल करता हूं Game object: (
आपने अपना गेम :: गेम कन्स्ट्रक्टर को एक माउस के संदर्भ के रूप में घोषित किया है, लेकिन आप इसे एक संकेतक दे रहे हैं। या तो निम्न में बदलें:
गेम :: गेम (एचडब्ल्यूएनडी एचडब्ल्यूडब्ल्यूड, माउस * माउस); या:
गेम (एचडब्ल्यूएनड, माउस); यह भी ध्यान रखें कि जब आप अपना गेम कन्स्ट्रक्टर कहते हैं, तो आप वास्तव में एक अनावश्यक प्रतिलिपि बना रहे हैं: गेम theGame = गेम (एचडब्ल्यूएनडी, और माउस); इसके बजाय, इसे इस पर बदलें:
गेम theGame (एचडब्ल्यूएनड, और माउस );
Comments
Post a Comment