Slider[Style1]

Style2

Style3[OneLeft]

Style3[OneRight]

Style4

Style5[ImagesOnly]

Style6

image

หลังจากที่ผ่านบทที่ว่าด้วยการหมุนๆกันไปแล้ว มาคราวนี้ก็มาลองเข้าใจในเรื่องมุมมองของกล้องกันบ้างครับ ผลที่ได้จากบทนี้คือ เราจะเขียนโค้ดที่ทำให้ตัวเราเดินหรือว่าลอยไปดู object ต่างๆ
โค้ดชุดนี้เป็น tutorial ของเว็บ DB ต้นฉบับ

Rem Setup sync rate
Sync On
Sync Rate 30
set display mode 1024,768,32

Rem Create 5 cubes and place randomly
For x = 1 to 5
Make object cube x,100
Position object x,Rnd(2000),0,Rnd(2000)
Next x

Rem Main loop
Do
Rem Store camera angle
caY#= Camera angle Y()

Rem Control input for camera movement
If Upkey()=1 then Move camera 10
If Leftkey()=1 then Yrotate Camera Wrapvalue(caY#-5)
If Rightkey()=1 then Yrotate Camera Wrapvalue(caY#+5)

Rem Refresh Screen
Sync
Loop

มาทำความเข้าใจทีละบรรทัดเหมือนเดิมครับ
Sync On
Sync Rate 30
set display mode 1024,768,32
ทั้ง 3 บรรทัดนี้ก็ใช้ตั้งค่าหน้าจอทั้งขนาดการแสดงผลและอัตรา refresh จะมีอยู่ทุกโปรแกรมครับ

For x = 1 to 5
Make object cube x,100
Position object x,Rnd(2000),0,Rnd(2000)
Next x
คำสั่งหน้าตาคุ้นๆอย่าง for แล้วก็ next ใครเคยเรียนเขียนโปรแกรมมาบ้างแล้วก็คงเข้าใจได้ทันที ความหมายคร่าวๆของ for ก็คือ การทำซ้ำจนครบเงื่อนไข ในที่นี้จะเห็นว่ามี x = 1 to 5 ก็คือ กำหนดให้ x มีค่าเริ่มต้นเป็น 1 แล้วให้ทำคำสั่ง 2 บรรทัดต่อไป เมื่อเจอ next ก็จะเป็นการเพิ่มค่าให้ x ทีละ 1 นั่นก็คือเมื่อผ่าน next แล้ว x ก็จะมีค่า 2 แล้วก็วนกลับไปทำที่ for ต่อ วนไปอย่างนี้จน x = 5 สรุปคือ for ในชุดนี้จะทำซ้ำทั้งหมด 5 รอบ(1 ถึง 5) ถ้าครบแล้วก็จะหลุดออกจาก for แล้วไปทำคำสั่งในบรรทัดที่ต่อจาก next
มาดูข้างใน for กันบ้าง

Make object cube x,100
บรรทัดนี้ก็เป็นการสร้าง cube โดยมีตัวแปร x เป็นชื่อ เมื่อ for ทำงาน x ตัวนี้ก็จะเปลี่ยนเป็นค่า 1,2,3,4,5 นั่นก็คือมี cube อยู่ 5 อัน แต่ละอันมีขนาด 100

Position object x,Rnd(2000),0,Rnd(2000)
บรรทัดนี้เป็นการกำหนดตำแหน่งให้กับ object x ซึ่งก็คือ cube x ที่สร้างจากบรรทัดบน(อย่าลืมว่า x มีค่า 1,2,3,4,5 ) ส่วนค่าอีก 3 ค่าที่อยู่ต่อไปจะเป็นตำแหน่งของ object เรียงตามแกน x,y,z ในโดนี้กำหนดให้ y เป็น 0 ส่วน x,z เป็น Rnd(2000) เป็นคำสั่งสุ่มค่าจาก0 ถึงค่าที่เราใส่ไป ในที่นี้คือ 2000 โปรแกรมก็จะสุ่มตำแหน่งของ cube ไม่ให้ซ้ำกัน
สรุปโค้ดในชุดนี้คือ การสร้าง cube 5 อันแล้วสุ่มการวางตำแหน่งไม่ให้ซ้ำกันนั่นเอง

Do
Rem Store camera angle
caY#= Camera angle Y()

Rem Control input for camera movement
If Upkey()=1 then Move camera 10
If Leftkey()=1 then Yrotate Camera Wrapvalue(caY#-5)
If Rightkey()=1 then Yrotate Camera Wrapvalue(caY#+5)

Rem Refresh Screen
Sync
Loop
คำสั่ง do..loop ดูเหมือนว่าจะต้องมีทุกโปรแกรมครับ เอาไว้ให้โปรแกรมทำงานวนรอบไปตลอด

caY#= Camera angle Y()
ตั้งตัวแปร caY เป็นชนิด float เก็บค่ามุมกล้องแกน y

If Upkey()=1 then Move camera 10
If Leftkey()=1 then Yrotate Camera Wrapvalue(caY#-5)
If Rightkey()=1 then Yrotate Camera Wrapvalue(caY#+5)
ในส่วนนี้ก็เป็นการเช็คว่ากดปุ่มลูกศรอะไรบ้าง ถ้ากดปุ่มลูกศรขึ้น ก็จะเลื่อมกล้องไปข้างหน้าอีก 10
ถ้ากดซ้ายก็จะหมุนมุมกล้องไปทางแกนy อีก -5 ในทางตรงกันข้ามหากกดขวาก็จะเพิ่มอีก +5 เพื่อความเข้าใจลอง run ดูผลจากโค้ดทั้งหมดแล้วกดปุ่ม บน ซ้าย ขวา ดูครับ แล้วจะเข้าใจ

******เพื่อความเข้าใจลองเปลี่ยนค่า
For x = 1 to 5
ลองเปลี่ยนเลข 5 เป็นตัวอื่นดูซิครับ แล้วผลคืออะไร
Rnd(2000)
เปลี่ยนค่า 2000 แล้วตำแหน่งของวัตถุเป็นยังไง ค่ามากกับค่าน้อยให้ผลต่างกันมั้ย
Move camera 10
เปลี่ยนค่า 10 แล้วเวลากดปุ่มขึ้น มันได้ผลยังไง
ถ้าอย่างเก่งไวไว ลองเพิ่มโค้ดให้ถอยหลังกลับดูซิครับ
ลองเล่นดูนะครับ ค่อยๆเรียนรู้ไปพร้อมๆกัน แล้วบทหน้าเจอภาค 2 คราวนี้ใช้ mouse ร่วมด้วย

About Know2Play

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
«
Next
Newer Post
»
Previous
Older Post

No comments:

Post a Comment