รับข้อมูลจาก keyboard สู่ XNA
หลังจากก๊อปๆโค้ด เอาจาก post ที่แล้วก็ได้รถสีแดงนิ่งๆหนึ่งคัน ก็พอได้ไอเดียจะสร้างเกมละ
เริ่มมาทำให้มันขยับซ้ายขวาดีกว่า
ก่อนอื่น จากเดิมเลย มันอยู่รถซะมุมซ้ายบนนั้นเลย ย้ายให้มันเริ่มตำแหน่งดีขึ้นนิด ทีนี้จะใส่ Initialize() หรือ LoadContent() ดีล่ะ ถ้าอ่านๆดูจากไฟล์ที่มัน gen มาให้ก็จะพบนั่นล่ะ เหอๆ คือถ้าไม่ใช่เรื่องกราฟฟิกให้ใส่ไว้ที่ Initialize() ดังนั้นจะกำหนดตำแหน่งเริ่ม ก็เอาไว้ที่ LoadContent()
จะได้เมธอดนี้หน้าตาใหม่เป็น
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
carTexture = Content.Load<Texture2D>("car1");Rectangle windowBounds = Window.ClientBounds;
carPosition = new Vector2(windowBounds.Width / 2 – carTexture.Width / 2,
windowBounds.Height – carTexture.Height);
}
windowBounds.Width ก็จะเท่ากับค่าความกว้างของวินโด้เกม ส่วน carTexture.Width ก็ความกว้างtextureรถ สรุปว่า Rectangle และ Texture2D นั้นมี .Width .Height ให้เรียกใช้ อืม…สะดวกดีๆ (ถ้าขี้เกียจจะเรียกเมธอดนู่นนี่ เราก็กำหนดค่าไปเลยก็ได้ เช่น carPosition.X = 10 แต่มันก็จะทำให้เมื่อโปรแกรมมันใหญ่ขึ้นพอจะแก้อะไรก็รุงรังไปหมด) หมายเหตุ ถ้าถึงจุดนี้คุณยังก๊อปโค้ดอยู่ทั้งหมดก็จะไม่รุ้ว่า Visual มันฉลาดพอตัว เมื่อพิมพ์ carPosition. มันก็จะแสดงเมธอดและตัวแปรต่างๆออกมาให้ ละสำหรับคนไม่รุ้จริงๆ เวลามันโชว์อันนั้นแล้วจะกด space bar หรือ = หรือ enter มันก็จะ auto complete ให้เลย
F5 อีกที รถย้ายตำแหน่งละ จะเห็นว่ามันย้่ายลงมาข้างล่าง จากเดิมที่อยู่มุมซ้ายบน ซึ่งไอซ้ายบนนั้นอ่ะ คือ x = 0 และ y = 0 ครั้งแรกไม่ได้ใส่ค่าไรไปมันเลยเริ่มตรงนั้นล่ะ อยากให้ลองตั้ง carPosition.X และ carPosition.Y เป็นตัวเลขไปเลยก็ดีครับ จะได้เข้าใจว่าถ้า X = 100 อยู่ไหน และ X = -100 อยู่ไหน(-100 มันก็มองไม่เห็นอ่ะครับ เพราะมันจะอยู่ทางซ้ายนู้นน หลุดขอบจอไป)
ต่อเลย จะให้มันขยับซ้าย ขวา ก็ต้องไปอัพเดท carPosition แน่นอนว่าต้องทำใน เมธอดUpdate() ก่อนอื่นก็ลองก่อนเลย เพิ่มไปตรง // TODO: Add your update logic here นั่นล่ะ
carPosition.Y–;
ลองแค่นั้นล่ะ อยากเห็นมันเลื่อนก่อน 55+พอ เข้าใจไอเดียละใช่มั้ยครับ..
ลบไอที่ลองตะกี้ทิ้งไป มาทำไอสิ่งที่ตั้งใจจะทำดีกว่า
KeyboardState keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.Left))
carPosition.X -= 5;if (keyboard.IsKeyDown(Keys.Right))
carPosition.X += 5;
นั่น!! รับข้อมูลคีย์บอร์ดได้แล้วว ง่ายอีกละ อ่านอังกฤษออกก็พอเข้าใจว่ามันทำไรเลย
สุดท้ายขอปรับแต่งไรหน่อย ให้มันเป็นเกมมากขึ้นๆ ผลสุดท้ายได้มาอย่างนี้
protected override void Update(GameTime gameTime) { Rectangle windowBounds = Window.ClientBounds; KeyboardState keyboard = Keyboard.GetState(); if (keyboard.IsKeyDown(Keys.Left) && carPosition.X > 0) carPosition.X -= 3; if (keyboard.IsKeyDown(Keys.Right) && carPosition.X < windowBounds.Width - carTexture.Width) carPosition.X += 3; if (keyboard.IsKeyDown(Keys.Up) && carPosition.Y > 0) carPosition.Y -= 5; if (keyboard.IsKeyDown(Keys.Down) && carPosition.Y < windowBounds.Height - carTexture.Height) carPosition.Y ++; if(carPosition.Y < windowBounds.Height - carTexture.Height) carPosition.Y += 2; base.Update(gameTime); }
ก็จะได้เป็นรถที่เร่งไปข้างหน้าได้ เบรกได้ ซ้าย ขวาได้ ใส่เสียงอีกหน่อยนะได้ feel เลย
จบอีกเรื่อง ค่อยๆเป็น ค่อยๆไปครับ..
