FullScreen Mode : Switch (Part 2)
posted on 14 Oct 2008 16:28 by ninetales in XNA
จากตอนที่แล้ว เราพบกับปัญหาเนื่องจาก
เราต้องการ สั่งให้ทำงานเพียงครั้งเดียวเมื่อมีการกดปุ่ม
แต่เกมขยันเช็คทุก loop ว่าเรา "กำลังกดอยู่" (ตอนนี้กด)
เพราะฉะนั้น...เราจะต้องเปลี่ยนไปเช็คว่า
"พึ่งจะเริ่มกด" (ก่อนหน้านี้ไม่กด แต่ตอนนี้กด)
หรือ "กดเสร็จแล้ว" (ก่อนหน้านี้กดอยู่ แต่ตอนนี้เลิกกดแล้ว)
ถ้าก่อนหน้านี้กดอยู่ แล้วตอนนี้ก็กดอยู่ ไม่ทำ!
ให้ประกาศในส่วนของ Globalดังนี้
KeyboardState currentKeyBoard;
KeyboardState previousKeyBoard;
เราจะใช้ KeyboardState2ตัว ในการเช็ค การกดในรอบนี้ และรอบก่อนหน้านี้
protected override void Update(GameTime gameTime)
{
//GetState เพื่อเช็คปุ่มที่กำลังกดอยู่
currentKeyBoard = Keyboard.GetState();
if (currentKeyBoard .IsKeyDown(Keys.Escape))
{
Exit();
}
//ถ้ารอบนี้กดF10 และ รอบก่อนหน้านี้ไม่ได้กด
if (currentKeyBoard.IsKeyDown(Keys.F10) && !previousKeyBoard.IsKeyDown(Keys.F10))
{
graphics.ToggleFullScreen();
}
//GetState การกดของรอบนี้ไว้ท้ายสุด เพื่อนำไปเช็คเป็นการกดของรอบที่แล้ว ในloopหน้า
currentKeyBoard = Keyboard.GetState();
base.Update(gameTime);
}
เท่านี้ ลองปักนิ้วลงไปบนปุ่ม F10 ดู โปรแกรมก็จะทำการ Toggle FulScreen 1ครั้ง แม้จะกดค้างไว้ก็ตาม
ลองอีกแบบหนึ่งบ้าง เปลี่ยนการเช็คปุ่ม F10 เป็น
if (!currentKeyBoard.IsKeyDown(Keys.F10) && previousKeyBoard.IsKeyDown(Keys.F10))
แค่สลับเครื่องหมาย ! ให้เป็น ก่อนหน้านี้กด แต่ตอนนี้ไม่กด
ลองใหม่ เสียบนิ้วลงไปบน F10ค้างไว้.... นิ่ง ไม่เกิดอะไรขึ้น
ดึงนิ้วออก! Toggle FulScreen ทันที!
edit @ 14 Oct 2008 17:18:28 by 『Ninetales』