Input Controller ** XNA

Download Report

Transcript Input Controller ** XNA

Input Controller ใน XNA
Suphot Sawattiwong
[email protected]
1
อุปกรณ์ควบคุมใน XNA
• ใน XNA ได้ แบ่งอุปกรณ์ควบคุมเป็ นทังหมด
้
3 ประเภท ได้ แก่
Keyboard, Mouse, XBOX360 Controller
• โดยในที่นี ้ขอเน้ นการใช้ งาน Keyboard กับ Mouse
2
การสนับสนุนอุปกรณ์ควบคุมใน XNA
• จากตารางเห็นได้ วา่ ในเครื่ อง XBOX360 ไม่มีการสนับสนุน
Mouse และ GamePad ที่ใช้ ใน XNA ต้ องเป็ น GamePad
ที่สนับสนุน XBOX360 Controller เท่านัน้ ไม่เช่นนันจะใช้
้
ไม่ได้
3
Keyboard
• ใน XNA แบ่ง Keyboard ที่ใช้ แบ่งเป็ น 2 ประเภท คือ
Keyboard ทัว่ ไป กับ ChatPad
4
Keyboard
• โดยที่การทางานหลักของ Keyboard ใน XNA เน้ นการใช้ งาน 2
Class หลัก ได้ แก่ Keyboard และ KeyboardState
• โดยมี enums ไว้ เรี ยกอ้ างอิงค่าปุ่ มต่างๆ ของ Keyboard คือ
Keys
• วิธีการเรี ยกใช้ Keyboard สามารถทาได้ โดยใน Method
Update เช่น
5
ตัวอย่างการเขียนควบคุม Keyboard ใน XNA
protected override void Update(GameTime gameTime)
{
// ทดสอบการใช้ Keyboard โดยหากกดปุ่ ม Escape ให้ ออกจากเกม
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
{
this.Exit();
}
base.Update(gameTime);
}
ดูตวั อย่างใน Ex5_InputKeyboard
6
Keyboard
• ส่วน KeyboardState เป็ นตัวที่แสดงสถานะว่าขณะนี ้
keyboard อยูใ่ นสถานะ KeyDown หรื อว่า KeyUp
– KeyDown คือจังหวะที่เรากดปุ่ ม
– KeyUp คือจังหวะที่เราปล่อยปุ่ ม
7
การเอาสถานะของ Keyboard
• ชุดคาสัง่ การนาสถานะของ Keyboardไปใช้ งานสามารถทาได้ ผ่าน
ทางชุดคาสัง่ Keyboard.GetState()
• หากใช้ คาสัง่ ดังกล่าว ทาให้ ได้ คา่ ของ KeyboardState มาเพื่อ
พร้ อมใช้ งานต่อไป โดยชุดคาสัง่ Keyboard.GetState() มีการ
เรี ยกใช้ ได้ 2 แบบดังนี ้
8
KeyboardState
• Method ของ KeyboardState ที่จาเป็ นต้ องรู้
9
ตัวอย่างของการรับค่า KeyboardState
• ให้ เปิ ดดู Project ที่ชื่อว่า Ex6_InputKeyboardState
10
Mouse
• ใน XNA นัน้ Mouse เป็ น input ที่สามารถใช้ ได้ ใน platform
Windows เท่านัน้ (ไม่สามารถใช้ ได้ ใน XBOX360) โดย มี Class
Mouse และ MouseState
• โดย Mouse จะเป็ นตัวเชื่อมต่อกับ Hardware
• โดยปกติ Mouse Cursor ใน XNA ถูกซ่อนไว้ หากต้ องการให้ เห็น
Mouse Cursor ต้ องใช้ คาสัง่ ดังต่อไปนี ้ใน Class Game1
this.IsMouseVisible = true;
ดูตวั อย่างได้ ใน Project ชื่อว่า Ex7_InputMouse
11
Mouse
• โดย MouseState เป็ นตัวแสดงสถานะต่างๆ ของ mouse โดย
สามารถกาหนดได้ ดงั นี ้
MouseState mouseState = Mouse.GetState();
ตัวแปรใน MouseState มีดงั ต่อไปนี ้
12
MouseState
13
MouseState
14
ButtonState
• Enum ButtonState จะเก็บ Event อยู่ 2 แบบ คือ
Pressed และ Released โดยอุปกรณ์ควบคุมที่ใช้ ได้ แก่
Mouse และ GamePad
15
ตัวอย่างการ Click Mouse
• ให้ เปิ ด Project Ex8_MouseClick ขึ ้นมา แล้ วรัน เห็นได้ วา่
ไม่วา่ click mouse ซ้ ายตรงไหน ก็เป็ นปุ่ มทังหมด
้
• ซึง่ หากทาเป็ นปุ่ มกดจริงๆ ต้ องรู้จกั เรื่ องของการชนกัน หรื อ
Collision Detection ก่อน
16
Collision Detection
• การชนกันของวัตถุ ในเกมเราจะวัดค่าจากการชนได้ โดยการดูวา่ วัตถุ 2
อันได้ มีการ ซ้ อนทับกันหรื อไม่
• โดย Collision Detect จะเป็ นการเช็คว่าวัตถุ 2 ชิ ้นนี ้ซ้ อนทับกัน
หรื อไม่
17
Collision Detection
• โดยจะเอาตาแหน่ง ของวัตถุ ความกว้ างยาวของวัตถุมาวาดเป็ น
สี่เหลี่ยม
18
Collision Detection
• ชุดคาสัง่ ในการใช้ ได้ โดยอาศัย Rectangle ในการตรวจสอบเรื่ อง
การชนได้ ดงั นี ้
สี่เหลี่ยมอันที่ 1.Intersects(สี่เหลี่ยมอันที่ 2)
เช่น cursorRect.Intersects(playBtnRect)
โดยคาสัง่ นี ้ ได้ สง่ ค่า true หากเกิดการชนกัน และ false หากไม่มี
การชนกันเกิดขึ ้น
• สามารถดูได้ ใน Project Ex9_MouseClick2
19
Collision Detection
• นอกจากการใช้ สี่เหลี่ยมในการตรวจสอบการชนแล้ ว สามารถใช้
ระยะทางระหว่างจุดเพื่อหาการชนได้ เช่นเดียวกัน
• Collision Detection โดยใช้ ระยะห่างระหว่างจุด ทาได้ ดงั นี ้
• หาก ระยะห่างน้ อยกว่ารัศมีของ 2
วงกลม แสดงว่ามีการชนเกิดขึ ้น
x2,y2
ระยะห่าง =10
x1,y1
20
ระยะห่างระหว่างจุด 2 จุด
• ระยะห่างระหว่างจุด (x1, y1) และ (x2, y2) ทาได้ ดงั นี ้
d  (x) 2  (y ) 2  ( x2  x1 ) 2  ( y2  y1 ) 2
• Tip: หากต้ องการวัดว่าระยะห่าง 2 จุด ระยะใดมากกว่ากัน ก็ไม่
จาเป็ นต้ องใช้ Square Root
21
Lab5 Mouse Input
• ให้ วาด Cursor ด้ วยรูปต่อไปนี ้
• โดยที่ให้ วาดตัวหนังสือ แสดงพิกดั ของ x,y ของ mouse cursor
ที่ได้
• ให้ ทาการวาดรูปดังต่อไปนี ้ลงบนหน้ าจอ
• หากกด click mouse ซ้ าย ให้ ทาการเปลี่ยนรูปเป็ นรูปต่อไปนี ้
• แล้ วให้ ทาการขยายใหญ่ขึ ้นหากยัง clickอยู่
22
Lab6 เกมเก็บของ
•
•
•
•
•
•
•
ให้ ใช้ แม่มดอยูด่ ้ านล่างสุดของจอ โดยให้ แม่มดเป็ นตัวที่ใช้ เก็บของ
โดยแม่มดสามารถเลื่อนซ้ ายเลื่อนขวาได้
ให้ วาดคะแนนอยูม่ มุ ขวาบน
ให้ หาทาการปล่อยภาพต่อไปนี ้ลงมา
โดย random จุดปล่อยลงมาในแนวแกน x
ให้ เก็บเฉพาะภาพสีเหลือง ได้ คะแนนภาพละ 100
หากเป็ นภาพสีแดงต้ องไม่เก็บ และ คะแนนจะลดลง 100 คะแนนถ้ าไปเก็บ
โดนสีแดง
• แต่หากคะแนนน้ อยกว่า 0 ให้ เท่ากับ 0
23