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』

Comment

Comment:

Tweet

//GetState การกดของรอบนี้ไว้ท้ายสุด เพื่อนำไปเช็คเป็นการกดของรอบที่แล้ว ในloopหน้า
currentKeyBoard = Keyboard.GetState();


ตอนท้ายน่าจะเก็บเป็น
previousKeyBoard = Keyboard.GetState();
หรือป่าวคะ ^^

#2 By คุ้งคุ้ง (180.183.95.122) on 2011-09-22 00:30

กำลังรออ่านต่อไปครับ หายไปหลายวันแล้วนะเนี้ยะconfused smile

#1 By robocon on 2008-10-29 11:59

『Ninetales』 View my profile