ฉันกำลังพัฒนาการ์ดเกมใน XNA
มีOnClick
เหตุการณ์ใดใน XNA สำหรับวัตถุหรือไม่
ฉันพยายามที่จะทำให้ไพ่เคลื่อนที่เมื่อผู้เล่นคลิกที่ไพ่ ในโครงการนี้มีคลาส Sprite ที่วาดการ์ด แต่ฉันติดอยู่เล็กน้อยเพราะฉันไม่รู้วิธีใช้OnClick
เหตุการณ์หรืออะไรทำนองนั้น
ฉันกำลังพัฒนาการ์ดเกมใน XNA
มีOnClick
เหตุการณ์ใดใน XNA สำหรับวัตถุหรือไม่
ฉันพยายามที่จะทำให้ไพ่เคลื่อนที่เมื่อผู้เล่นคลิกที่ไพ่ ในโครงการนี้มีคลาส Sprite ที่วาดการ์ด แต่ฉันติดอยู่เล็กน้อยเพราะฉันไม่รู้วิธีใช้OnClick
เหตุการณ์หรืออะไรทำนองนั้น
คำตอบ:
เมื่อทำงานกับ XNA โดยทั่วไปคุณต้องย้ายจากกระบวนทัศน์รหัสที่ขับเคลื่อนด้วยเหตุการณ์เป็นกระบวนทัศน์รหัสที่ขับเคลื่อนด้วยลูป รหัสอัพเดทของคุณวนซ้ำ 60 ครั้ง / วินาที ดังนั้นในแต่ละครั้งให้ดูที่สถานะของเมาส์และหากปุ่มไม่ทำงาน & ตัวชี้อยู่ในรูปสี่เหลี่ยมผืนผ้าของคุณจากนั้นให้ทำการแยกรหัสตามปกติที่คุณวางไว้ในเหตุการณ์ OnClick
if(MouseLeftPress()){ DoSomething(); }
ที่MouseLeftPress()
เป็นวิธีการที่คุณเขียนเพื่อเปรียบเทียบรัฐเมาส์ปุ่มซ้ายในปัจจุบันและก่อนหน้านี้ ฉันพบว่าสิ่งนี้ง่ายกว่าการใช้เหตุการณ์เป็นส่วนใหญ่
คุณจะต้องดำเนินการด้วยตัวเอง ลองดูที่บทช่วยสอนที่: http://bluwiki.com/go/XNA_Tutorials/Mouse_Input
XNA ให้คุณพอเพียงในการสร้างคลาสอินพุตของคุณเอง - และคุณควรพิจารณาถึงยูทิลิตี้ที่มีให้
ฉันจะแนะนำคลาสอินพุตเมาส์ที่อธิบายไว้ในโพสต์บล็อกนี้ ( ซอร์สโค้ด ) มันจะตรวจจับปุ่มที่ถูกกดค้างไว้หรือปล่อยและช่วยให้คุณได้รับข้อมูลนั้นไม่ว่าจะผ่านการสำรวจหรือกิจกรรม
ในบันทึกที่เกี่ยวข้องโพสต์บล็อกเดียวกันยังมีคลาสอุปกรณ์อินพุตและแป้นพิมพ์ gamepad
รหัสจริงสำหรับการตรวจสอบการคลิกเมาส์ใน XNA นั้นเป็นอย่างนี้
MouseState previousMouseState;
protected override void Initialize()
{
// TODO: Add your initialization logic here
//store the current state of the mouse
previousMouseState = Mouse.GetState();
}
protected override void Update(GameTime gameTime)
{
// .. other update code
//is there a mouse click?
//A mouse click occurs if the goes from a released state
//in the previous frame to a pressed state
//in the current frame
if (previousMouseState.LeftButton == ButtonState.Released
&& Mouse.GetState().LeftButton == ButtonState.Pressed)
{
//do your mouse click response...
}
//save the current mouse state for the next frame
// the current
previousMouseState = Mouse.GetState();
base.Update(gameTime);
}
ถ้าเกมของคุณเป็นแบบ 3 มิติคุณสามารถใช้การเลือกซึ่งจะอธิบายที่นี่: http://create.msdn.com/en-US/education/catalog/sample/picking_triangle โดยพื้นฐานแล้วสิ่งนี้จะสร้างรังสีจากกล้องไปยังที่ที่เมาส์คลิก (โดยมีเมทริกซ์เล็ก ๆ น้อย ๆ ที่ไม่ได้ใส่เข้าไป) จากนั้นคุณตรวจสอบเพื่อดูว่าวัตถุใด ๆ ของคุณถูกตัดโดยรังสี
หากเกมของคุณเป็นแบบ 2D คุณควรจะสามารถแปลพิกัดหน้าต่างเป็นพิกัดของเกมได้อย่างง่ายดาย จากนั้นตรวจสอบว่าพิกัดที่เลือกนั้นอยู่ในขอบเขตของวัตถุใด ๆ ของคุณหรือไม่
วิธีที่ง่ายที่สุดในการดูว่ามีการคลิกเมาส์หรือไม่
//Create this variable
MouseState mouseState;
ตอนนี้ในวิธีการอัปเดตเพิ่มสิ่งนี้
mouseState = Mouse.GetState();
if (mouse.RightButton == ButtonState.Pressed)
{
//Do Stuff
}
หวังว่าสิ่งนี้จะช่วยได้