มาคราวนี้เราจะมาต่อยอดจากคราวที่แล้ว ที่ผมเขียนโค้ดเพื่อทำให้ตัว object หมุน โดยใช้โค้ดง่ายๆ วันนี้เราก็จะมาเรียนในเรื่องของอินพุตซึ่งก็คือ Keyboard นั่นเอง แล้วเอาค่าที่ได้มาควบคุมตัว object ที่เราสร้าง(งงมั้ยเนี่ย) เอาเป็นว่ามาดูกันเลยครับ
Rem Setup sync rate
Sync On
Sync Rate 30
set display mode 1024,768,32
Rem Create sphere
Make object cube 1,100
Rem Main loop
Do
Rem Store the object’s Y angle in aY#
aY# = Object angle Y(1)
Rem Control input
If Upkey()=1 then Move object 1,2
If Leftkey()=1 then aY# = Wrapvalue(aY#+5)
If Rightkey()=1 then aY# = Wrapvalue(aY#-5)
Rem rotate the sphere
Yrotate object 1,aY#
Rem Refresh Screen
Sync Loop
คงจำกันได้นะครับสำหรับ REM บอกอีกทีละกัน ตัวนี้เป็นคำสั่งสร้าง Comment ข้อความที่อยู่หลัง rem ในบรรทัดเดียวกันจะถือว่าเป็น comment คือ โปรแกรมจะไม่สนใจบรรทัดที่มี rem นั่นเอง
มาว่ากันทีละบรรทัดเลย
Sync On Sync Rate 30 set display mode 1024,768,32
3 บรรทัดนี้ก็ใช้กำหนดหน้าจอที่แสดงผลให้มีขนาด 1024×768 ที่ 32 บิต อัตรา Refresh 30
Make object cube 1,100
สร้าง object แบบ cube(ลูกบาศก์) มีชื่อว่า 1 และมีขนาด 100
aY# = Object angle Y(1)
สำหรับบรรทัดนี้เป็นเรื่องใหม่ครับ
ชนิดข้อมูลใน DB มีอยู่ 3 แบบครับ
1. จำนวนเต็ม(Integer) เก็บค่าจำนวนเต็ม เช่น 1, 10, 569 , -4571
การตั้งตัวแปร A = 1
C = -4571
2.จำนวนจริง(Floating Point) เก็บค่าพวกทศนิยมทั้งค่าบวกและลบเช่น 5.12 , -9658 , 0.00005
การตั้งตัวแปร mydata# = 5.12
angleY# = 0.00005
สังเกตว่าการตั้งตัวแปรที่เก็บค่าทศนิยมจะมีตัว # อยู่หลังตัวแปรเสมอครับ
3.ข้อมูลที่เป็นชุดตัวอักษร(String) ใช้เก็บข้อความ เช่น helloworld , ilikeit
การตั้งตัวแปร myname$ = “helloworld”
Mysay$ = “ilikeit”
ตัวแปรแบบนี้ใช้ตัว $ ตามหลังตัวแปร ทำให้ตัวแปรทั้ง 3 ตัวแตกต่างกัน จะได้ใช้ไม่ผิด
ตอนนี้เราก็รู้แล้วว่า aY# คือการตั้งตัวแปรชื่อ aY เป็นชนิด floating point
ตัวต่อมาก็คือ
Object angle Y(1)
คำสั่งนี้เป็นการรับค่าจากมุมที่มีการหมุนในแกน Y ของ object 1 ก็คือ cube ที่ได้สร้างไว้แล้ว
aY# = Object angle Y(1)
ผลของบรรทัดนี้ก็คือ ให้ aY เก็บค่ามุมในแกน Y ของ object ที่เราสร้าง เราจะใช้บรรทัดนี้เพื่อควบคุมการหมุนของ object (ถ้างงก็ลองใส่โค้ดทั้งหมดแล้ว run ดูผลครับ อย่าลืมกดแป้นลูกศร ซ้าย ขวา บน ด้วยละ)
If Upkey()=1 then Move object 1,2
บรรทัดนี้มีการใช้คำสั่งที่เป็นเงื่อนไข ก็คือ if…then นั่นเอง รูปแบบก็ง่ายๆครับ
ถ้าเงื่อนไขหลัง if เป็นจริง คำสั่งหลัง then ก็จะถูกทำด้วย
Upkey() = 1 คือ การเช็คดูว่ามีการกดปุ่มลูกศรขึ้นบนkeyboard หรือไม่ ถ้ามีการกดก็จะได้ค่า 1 ถ้าไม่กดก็ได้ ในนี้มีเงื่อนไขว่า ถ้ามีการกดให้ไปทำหลัง then ได้เลย
Move object 1,2 คือ ให้มีการเคลื่อนย้ายวัตถุจากด้านใดด้านหนึ่ง ไปทีละ 2 (จึ๊ก)
If Leftkey()=1 then aY# = Wrapvalue(aY#+5) If Rightkey()=1 then aY# = Wrapvalue(aY#-5)
Wrapvalue คือ การกำหนดให้ค่ามุมที่ได้ต้องมากกว่า 0 แต่น้อยกว่า 360
สรุปคือ ถ้ามีการปุ่มลูกศรซ้าย ก็จะมีการเพิ่มค่ามุมทีละ +5 โดยค่าที่ได้จะไม่เกิน 360 องศา เก็บไว้ใน aY
อีกบรรทัดคือ ถ้ามีการกดปุ่มลูกศรขวาก็ให้มีการลดค่ามุมลง -5
Yrotate object 1,aY#
คำสั่งนี้ใช้เพื่อหมุน object ที่เรากำหนดก็คือ 1 หรือ cube ที่สร้างไว้แล้ว โดยค่ามุมที่หมุนจะเป็นค่าที่ได้จาก aY นั่นเอง
Sync
เอาไว้ refresh หน้าจอ (อันนี้แปลตรงๆครับ..)
รวมๆแล้วโปรแกรมนี้ก็คือ การรับค่าจาก keyboard แล้วเอามาใช้เปลี่ยนค่ามุมของ object ทำให้ตอนที่ run แล้ว เวลาเรากดลูกศรซ้ายหรือขวาก็จะเกิดการหมุน ส่วนลูกศรบนจะทำให้ object เคลื่อนที่ไปด้านหน้า เริ่มคล้ายๆเกมแนว FPS แล้วละครับ
No comments: