Keyboard : ย่อ Code ให้สั้นลง

posted on 11 Oct 2008 23:29 by ninetales in XNA

จากเดิมที่เราต้องเขียนซะยืดยาวว่า

            if (Keyboard.GetState().IsKeyDown(Keys.Escape))

 ซึ่งอีกเดี๋ยวเราจะต้องเขียนคล้ายๆแบบนี้อีกหลายบรรทัด
เพราะฉะนั้นเขียนให้สั้นจึงดีที่สุด ยิ่งเขียนสั้นยิ่งเอาเวลาไปคิดเรื่องตัวเกมได้มาก

 ดังนั้นเราจะย่อ Keyboard.GetState() เหลือแค่ keyboard
(จำไว้ว่า ตัวแปรในภาษา C# ตัวเล็กใหญ่มีผลถือว่าเป็นคนละตัวกัน)

ดึง Keyboard.GetState(); ออกมา
เอา keyboard ยัดลงไปแทน
ก็จะกลายเป็น

 keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.Escape))

สั้นลงแล้ว แต่ยังใช้ไม่ได้ เพราะ ต้องมีการประกาศทุกๆตัวแปรที่ใช้ และ  keyboard จัดเป็นตัวแปรตัวหนึ่ง
ดังนั้น keyboard ต้องเป็นตัวแปร "อะไรสักอย่าง" ที่มารับค่าของ Keyboard.GetState(); ได้

???  keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.Escape))

ใน XNA นั้น Keyboard.GetState(); มีค่าเป็น object ประเภท KeyboardState
Code จึงต้องเขียนเป็น

        protected override void Update(GameTime gameTime)
        {

            KeyboardState keyboard = Keyboard.GetState();
            if (keyboard.IsKeyDown(Keys.Escape))
            {

                Exit();
            }

            base.Update(gameTime);
         }

เพียงแค่นี้ ก็ run ได้ ใช้งานได้แล้ว
ไม่ต้องมาเขียน Keyboard.GetState() ทุกบรรทัดที่เช็ค keyboard
ถึงแม้จะอยู่ใน loop ของ Update แต่สามารถประกาศตัวแปรไว้ได้ ไม่เป็นปัญหา
เพราะ C# อนุญาตให้ประกาศทับได้
แต่เอาออกไปประกาศ รอบเดียวดีกว่าใหม?
งั้นเราแยก การประกาศ ออกมาดีกว่า

        protected override void Update(GameTime gameTime)
        {
            KeyboardState keyboard;
            keyboard = Keyboard.GetState();
            if (keyboard.IsKeyDown(Keys.Escape))
            {

                Exit();
            }

            base.Update(gameTime); 

         }

Keyboard.GetState();จำเป็นต้องมีการUpdateทุกรอบ เพราะต้องคอยเช็ค Keyboard ตลอดเวลา
จึงต้องอยู่ใน Update()

จากนั้น ยก  KeyboardState keyboard; ออกไปไว้ข้างนอก ตรง Global (เหนื่อ Game1( ) )
ก็เป็นอันเสร็จสมบูรณ์

edit @ 13 Oct 2008 16:41:43 by 『Ninetales』

Comment

Comment:

Tweet

อืม ตอนนี้ กำลังเขียนเกม XNA อยู่อ่ะค่ะ ถ้ามีปัญหาอะไร ขอปรึกษาหน่อยได้ไหมค้าbig smile

#2 By SagoHero on 2009-08-19 16:06

ขอบคุณมากเลยคับ ผมเพิ่งเริ่มหัดเขียน ^^! เอาความรู้มาลงเยอะๆ นะคับ จะติดตามต่อไป

#1 By Penchamp (161.200.255.162) on 2008-12-13 14:03

『Ninetales』 View my profile