2012-03-15 17 views
11

पर मेरे पास 2 डी गेम है जिसमें मैं इनपुट के रूप में केवल माउस का उपयोग करता हूं। मैं इसे कैसे बना सकता हूं ताकि जब माउस एक Texture2D ऑब्जेक्ट पर होवर हो, तो Texture2D और माउस कर्सर बदल जाएंगे, और जब बनावट क्लिक की जाती है तो यह दूसरी जगह पर जाती है।2 डी एक्सएनए गेम माउस

बस शब्दों में कहें, मैं जानना चाहता हूं कि जब मैं होवर करता हूं या Texture2D पर क्लिक करता हूं तो कुछ कैसे करना है।

+0

इस पर अंतर्गत आता है http : //gamedev.stackexchange.com/ – RQDQ

उत्तर

30

एक्सएनए में आप उपयोगकर्ता इनपुट क्वेरी करने के लिए Mouse class का उपयोग कर सकते हैं।

ऐसा करने का सबसे आसान तरीका प्रत्येक फ्रेम के लिए माउस स्थिति की जांच करना और तदनुसार प्रतिक्रिया देना है। क्या एक निश्चित क्षेत्र के अंदर माउस की स्थिति है? एक अलग कर्सर प्रदर्शित करें। क्या इस फ्रेम के दौरान दायां बटन दबाया गया है? एक मेनू दिखाएं

var mousePosition = new Point(mouseState.X, mouseState.Y); 

बदलें एक बनावट जब माउस एक निश्चित क्षेत्र के अंदर है:

Rectangle area = someRectangle; 

// Check if the mouse position is inside the rectangle 
if (area.Contains(mousePosition)) 
{ 
    backgroundTexture = hoverTexture; 
} 
else 
{ 
    backgroundTexture = defaultTexture; 
} 
आदि

var mouseState = Mouse.GetState(); 

स्क्रीन निर्देशांक में माउस की स्थिति (ऊपर बाएं कोने के सापेक्ष) जाओ

बाएं माउस बटन पर क्लिक करते समय कुछ करें:

if (mouseState.LeftButton == ButtonState.Pressed) 
{ 
    // Do cool stuff here 
} 

याद रखें कि आपके पास हमेशा वर्तमान फ्रेम की जानकारी होगी। तो जब बटन क्लिक होने के दौरान कुछ ठंडा हो सकता है, तो इसे रिलीज़ होने पर रोक दिया जाएगा।

एक भी जांच करने के लिए क्लिक करें आप अंतिम फ्रेम के माउस राज्य की दुकान और तुलना क्या बदल गया है करने के लिए होगा:

// The active state from the last frame is now old 
lastMouseState = currentMouseState; 

// Get the mouse state relevant for this frame 
currentMouseState = Mouse.GetState(); 

// Recognize a single click of the left mouse button 
if (lastMouseState.LeftButton == ButtonState.Released && currentMouseState.LeftButton == ButtonState.Pressed) 
{ 
    // React to the click 
    // ... 
    clickOccurred = true; 
} 

आप इसे और भी अधिक उन्नत कर सकता है और घटनाओं के साथ काम करते हैं। तो आप अभी भी ऊपर से स्निपेट का उपयोग करेंगे, लेकिन कार्रवाई के लिए कोड सहित सीधे सीधे आप ईवेंट को आग लगेंगे: माउसइन, माउसओवर, माउसऑट। ButtonPush, ButtonPressed, ButtonRelease, आदि

+0

आयत। एक बिंदु लेता है इसलिए मुझे यकीन नहीं है कि आपने माउस.गेटस्टेट() द्वारा एक वेक्टर में लौटाई गई पॉइंट को क्यों परिवर्तित किया। – ClassicThunder

+0

बहुत बहुत धन्यवाद, लुइसियस –

+0

लेकिन मैं किसी भी स्थिति में बनावट के साथ क्लिक को कैसे जोड़ सकता हूं। जब मैंने छोड़ा तो किसी भी स्थिति में इसे एक विशिष्ट आयताकार पर क्लिक नहीं किया गया! –

-1

मैं सिर्फ इतना है कि आप इसके लिए एक चर बनाने के लिए की जरूरत नहीं है जोड़ने के लिए है कि माउस क्लिक कोड को सरल बनाया जा सकता है करना चाहते हैं:

if (Mouse.GetState().LeftButton == ButtonState.Pressed) 
    { 
     //Write code here 
    } 
+0

मूल प्रश्न के लिए इसका क्या संबंध है? – jeteon

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