การทำอักษรเลื่อนใน xna 4.0

การทำอักษรเลื่อนใน xna 4.0
จากครั้งก่อนที่ผมเขียนเกมส์เล่นกับ xna ครั้งนี้เลยมาเขียนบทความจะการที่ผมได้ลองทำดู มันเป็นเรื่องเกี่ยวกับการสั่งให้ตัวอักษรเคลื่อนที่ขึ้นไปเหมือนกับการ แสดงข้อความหนังจบภาพยนตร์ เริ่มแรกเราก็สร้าง project xna game 4.0 ต่อมาก่อนจะวาดข้อความนั้นต้องทำการสร้าง font ก่อนนะครับ ให้ไปคลิกขวาที่ส่วนของ content แล้วเลือก new item

ทำการเลือก Sprite Font เมื่อทำการเขียนโค้ดเพิ่มตามนี้ครับ
ในส่วนของ class member

[sourcecode language=”c#”]
SpriteFont font;
Vector2 txtvector = new Vector2(200, 350);

[/sourcecode]

ในส่วนของ method ต่างๆ

[sourcecode language=”c#”]
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
font = Content.Load(“SpriteFont1”);

// TODO: use this.Content to load your game content here
}

protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

txtvector.Y -= 0.1f;

base.Update(gameTime);
}

protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.DrawString(font, “Thaicoding.net”, txtvector, Color.Black);
spriteBatch.End();

base.Draw(gameTime);
}

[/sourcecode]

textmove

ผลลัพธ์อักษรจะเลื่อนขึ้นเรื่อยเพราะตำแหน่งของอักษรที่เรากำหนดโดย vector2 txtvector ซึ่งมันจะอัพเดตค่าตลอดผ่าน method void Update(GameTime gameTime) โดยทำการบอกค่า y เพราะระบบ 2 มิติใน xna ค่า y ทางบวกจะลงไปด้านล่างตามรูปเราเลยต้องทำการลบค่า y ไปเรื่อยนั้นเอง

CoordintateSystem2D

ส่วนการวาดข้อความนั้นขั้นแรกต้องมีตัวแปรแบบ font ซึ่งต้องทำการโหลดค่า font เข้ามาใน method LoadContent() ดังนี้
font = Content.Load(“SpriteFont1”);
ส่วนการวาดข้อความก็ใช้คำสั่ง
spriteBatch.DrawString(font, “Thaicoding.net”, txtvector, Color.Black);
ซึ่งต้องใช้ค่า font ข้อความ ตำแหน่งแบบ vector2 สีอักษร ซึ่งคำสั่งนี้ต้องอยู่ระหว่าง spriteBatch.Begin() กับ spriteBatch.End() ก็เป็นอันจบ

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *