Copyright © All rights reserved | This template is made with by Colorlib

Next Big Event:

บทความในหมวด

DARKBASIC TUTORIALS

Darkbasic Tutorials

Motorway 2D Game Programming ตอนจบ

2010-05-04 Games 2,005

การแสดงผลของ Animation ใน DB Pro ขึ้นอยู่กับ 3 อย่างดังนี้

 

1. การทำงานใน Game Loop

 

หากใน Game Loop ของเรามีการทำงานซับซ้อน+ซ้ำซ้อน มากๆ การที่โปรแกรมจะวาดภาพ Sprite ขึ้นมาใหม่อีกครั้งก็จะช้าตามไปด้วย

 

2. ความเร็วของหน่วยประมวลผล

 

เนื่องจากการทำงานของคอมแต่ละเครื่องมีความเร็วในการประมวลผลที่แตกต่างกัน ดังนั้น Animation จึงมีความเร็วที่แตกต่างกันด้วย

 

3. ความถี่ในการวาดรูปใหม่ของหน้าจอ ( FPS เฟรม/วินาที )

 

รูปที่มีการเคลื่อนที่ หากไม่มีการวาดขึ้นที่หน้าจออย่างต่อเนื่องก็จะทำให้ดูกระตุก ไม่ลื่นไหล

 

 

 


 

 

ดังนั้นเราจึงเป็นเรื่องที่สำคัญในการเขียนเกมของเราสามารถแสดงผล Animation ได้อย่างถูกต้องในทุกๆสเปคเครื่อง

 

ในที่นี้จะเป็นวิธีแก้สำหรับกรณี ความเร็วของหน่วยประมวลผล ที่ไม่เท่ากันนะครับ

 

1. ขั้นแรกกำหนด FPS ที่ต้องการ ( เฟรมเรตหรือเฟรม/วินาที )

 

FPS=60

 

2. ขั้นที่สองใช้ตัวแปรมาคำนวณค่าเวลาในการทำงานของ Game Loop ในแต่ละรอบ

 

rem lastCycle เป็นตัวแปรที่นำมาเก็บเวลาการรันของ Game Loop ในแต่ละรอบ
lastCycle = Timer()-LoopTime
rem LoopTime เป็นตัวแปรที่นำมาเก็บค่า Timer()ในขณะเริ่มต้นการทำงานของ Loop
rem โดยที่ค่า Timer() จะรันอยู่ตลอดเวลาในหน่วยมิลิเซค ( 0.001 วินาที )
LoopTime =Timer()
rem Rate# เป็นค่าตัวคูณซึ่งจะนำไปใช้ในทุกๆจุดที่มีการ Animation ( เคลื่อนที่, หมุน , effect )
Rate#=( FPS / (1000.0 / lastCycle) )

 

3. ขั้นที่สาม คือนำค่า Rate# ไปคูณในทุกๆจุดที่มีการ Animation

 

Drive Game [ Download ]

 

 


 

 

หมายเหตุ

 

1. ข้อสังเกตุ หากเราลองแทนค่าและย้ายข้างของสมการดูก็จะรู้ว่าทำไมต้องใช้ Rate# ไปคูณในทุกๆที่ ที่ทำการ Animation

 

FPS / 1000.0 = Rate# / lastCycle
จะเห็นได้ว่าสมการข้างต้นเป็นการเทียบอัตราส่วนของการทำงานใน 1 วินาทีนั้นเอง
ดังนั้นเราจึงนำค่า Rate# มาใช้เพื่อให้อัตราส่วนของการวาดภาพ Animation ในแต่ละวินาทีออกมาเท่าๆกัน
แม้การประมวลผลในแต่ละรอบของคอมพิวเตอร์ทุกเครื่องจะไม่เท่ากันก็ตามที

 

2. เพื่อให้ชัดเจนยิ่งขึ้นเรามาลองแทนค่ากันดู

 

สมมุติคอม A สามารถทำงานใน Game Loop ได้ 1 วินาทีต่อรอบ
60 / 1000.0 = Rate# / 1000.0
ค่้าที่นำไปคูณก็จะได้ = 60
สมมุติคอม B สามารถทำงานใน Game Loop ได้ 0.5 วินาทีต่อรอบ
60 / 1000.0 = Rate# / 500.0
ค่้าที่นำไปคูณก็จะได้ = 30
ถ้าใน Code เราเขียนให้การเคลื่อนที่ของภาพในแต่ละรอบ = 1 pixel เมื่อนำค่า Rate# มาคูณก็จะได้ดังนี้
คอม A = 1*60 = 60 pixel ใน 1 วินาที
คอม B = 1*30 = 30 pixel ใน 0.5 วินาที
จะเห็นได้ว่า หากเทียบในหน่วย 1วินาทีเหมือนๆกัน การเคลื่อนที่ของภาพจะได้ค่าที่เท่ากันคือ 60 pixel

 

3. อ้างอิงและข้อมูลเพิ่มเติมจาก

 

thaigameadvance.com

thegamecreators.com

Beginners Guide To DarkBasic Game Programming


| Darkbasic Tutorials

เข้าชมแล้ว 2,933,171 ครั้ง | ทั้งเว็บออนไลน์   3 ท่าน | หน้านี้ออนไลน์   1 ท่าน
Page generated in 0.0357 seconds ! ( 13 query)