Slider[Style1]

Style2

Style3[OneLeft]

Style3[OneRight]

Style4

Style5[ImagesOnly]

Style6

DBPro 5 : มุมมองบุคคลที่ 3

image

ในบทก่อน เป็นการใช้ mouse และ keyboard เพื่อควบคุมมุมกล้อง ในแบบต่างๆ ในบทนี้จะเป้นการต่อเนื่องไปอีกคือ เราจะเพิ่ม object ลงไปแล้วเขียนโค้ดเพื่อให้ object นั้นเคลื่อนที่ คล้ายๆพวกเกมรถแข่ง หรือเกมแนว rpg หรือ action ที่มีมุมกล้องเป็นแบบบุคคลที่ 3

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

Rem Make 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 Make sphere
Make object sphere 10,50

Rem Main loop
Do
Rem Store Object angle Y in aY#
aY# = Object angle Y(10)

Rem Control input for camera
If Upkey()=1 then Move object 10,10
If Leftkey()=1 then Yrotate object 10,Wrapvalue(aY#-5)
If Rightkey()=1 then Yrotate object 10,Wrapvalue(aY#+5)

Rem get player object position and store in X# and Z#
X# = Object position x(10)
Z# = Object position z(10)

Rem get new camera position and store in cZ# and cX#
cZ# = Newzvalue(Z#,aY#-180,100)
cX# = Newxvalue(X#,aY#-180,100)

Rem position camera
Position Camera cX#,100,cZ#

Rem point the camera at the player object
Point camera X#,50,Z#

Rem Refresh Screen
Sync
Loop

ความหมายในแต่ละบรรทัด (ถ้าไม่เข้าใจบรรทัดไหนก็สามารถย้อนกลับไปดูในบทเก่าๆได้ครับ เพราะเนื้อหาจะต่อเนื่องกัน)
Sync On
Sync Rate 30
set display mode 1024,768,32
ตั้งค่าหน้าจอและอัตรา refresh ครับ ถ้าไม่เข้าใจให้ดูในบทแรกๆครับ

For x = 1 to 5
Make object cube x,100
Position object x,Rnd(2000),0,Rnd(2000)
Next x
คำสั่งเดิมๆ คือ สร้าง object 5 อันแล้วสุ่มตำแหน่งของแต่ละอัน ไม่ให้ซ้ำกัน

Make object sphere 10,50
สร้าง object แบบทรงกลม ชื่อ 10 ขนาด 50

มาดูกันใน do…loop กันบ้างครับ
aY# = Object angle Y(10)
สร้างตัวแปรชื่อ aY เป็นชนิด floating เก็บค่ามุมแกน Y ของวัตถุชื่อ 10 ซึ่งก็คือ ทรงกลมที่เราสร้างไปนั่นเอง

If Upkey()=1 then Move object 10,10
If Leftkey()=1 then Yrotate object 10,Wrapvalue(aY#-5)
If Rightkey()=1 then Yrotate object 10,Wrapvalue(aY#+5)
เป็นการกำหนดปุ่มบน keyboard เพื่อควบคุมมุมกล้อง
ปุ่มลูกศรบนให้วัตถุเคลื่อนที่ไปข้างหน้า 10
ปุ่มลูกศรซ้าย ให้วัตถุหันไปทางซ้าย 5
ปุ่มลูกศรขวา ก็ให้กันวัตถุไปทางขวา 5
(ทั้งหมดนี้เป็นการสรุปอย่างง่ายๆครับ เพื่อความเข้าใจ)

X# = Object position x(10)
Z# = Object position z(10)
อันนี้เรื่องใหม่ แต่ก็คล้ายๆของเดิมครับ คือ ตั้งตัวแปร x และ z โดยใช้เก็บค่าตำแหน่งทางแกน X และ Z ของทรงกลม ก็คือตำแหน่งในการเคลื่อนที่แนวราบของทรงกลม

cZ# = Newzvalue(Z#,aY#-180,100)
cX# = Newxvalue(X#,aY#-180,100)
ชุดนี้จะยากซักหน่อยครับ
ในชุดนี้จะเป็นการคำนวณเพื่อหาค่าตำแหน่งใหม่ ใน2 คำสั่งก่อน เราได้ตั้งตัวแปร x#,z# ที่เอาไว้เก็บค่าตำแหน่งกันแล้ว ในชุดนี้ก็สร้างตัวแปรอีก 2 ตัวเช่นกัน ในวงเล็บจะมี parameter อยู่ 3 ตัว
ตัวแรกคือ ค่าตำแหน่งปัจจุบันของวัตถุ ในที่นี้คือ z#,x#
ตัวที่ 2 คือ การคำนวณหาค่ามุมแกน Y ใหม่ โดยใช้ aY# ซึ่งเก็บค่ามุมแกน Y อยู่ก่อนแล้วมาคำนวณ
ตัวที่ 3 คือ เป็นค่าของ world unit ที่อยู่หลังจาก object ของเรา ค่า 100 เป็นค่าที่อยู่ห่างจาก object ทางด้านหลัง 100 หน่วย (แปลมั่วนิดๆ)

Position Camera cX#,100,cZ#
คำสั่งนี้เป็นคำสั่งที่ใช้ในการวางกล้อง ผลที่ได้คือ กล้องจะอยู่บน object

Point camera X#,50,Z#
ใช้กำหนดมุมกล้อง ตัวแปรหลังคำสั่งคือค่า x,y,z จะเห็นว่าใช้ตัวแปร x#,y# ซึ่งเป็นค่ามุมที่ได้จากทรงกลมที่สร้างขึ้น ผลคือ มุมกล้องจะหันไปพร้อมๆกับทรงกลม

อ่านจบก็ลองรันดูผลเลยครับ แล้วจะเข้าใจโค้ดมากขึ้น

มีแบบฝึกหัดให้ลองเล่นดูครับ คือ
1.ให้สร้างกล่องจากเดิมที่มีอยู่ 5 กล่อง เป็น 10 กล่อง
2. เปลี่ยนค่ามุม y ค่าเดิมคือ 50 เป็นค่าที่น้อยหรือมากกว่าก็ได้แล้วลองสังเกตผลลัพธ์

รูปแกนในระบบ 3 มิติ ที่เข้าใจง่ายๆ

image

image

DBPro 4 part 2 : งานนี้มี Mouse

image

ต่อจากภาค 1 ครับที่เราใช้แค่ ปุ่ม ซ้าย ขวา บน มันรู้สึกว่ายังธรรมดาๆไม่ค่อยสมบูรณ์คราวนี้ก็เลยเอาเมาส์มาร่วมวงด้วย จะได้เหมือนเกมจริงๆที่เค้าทำกัน
ก่อนอื่นต้องขอบคุณที่มาของบทความดีดีจากเว็บ www.thaigameadvance.com
หัวข้อกระทู้ LESSON2:กล้องนั้น สำคัญ นะจ๊ะ
ลิ้งค์ http://www.thaigameadvance.com/viewtopic.php?t=99&start=0&postdays=0&postorder=asc&highlight=

โค้ดชุดนี้ ทำการดัดแปลงจากของพี่เค้าครับ เรื่องการโหลดไฟล์ .x ผมขอพูดถึงทีเดียวในบทต่อๆไปละกัน

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

CamX#=250
CamY#=150
CamZ#=250
Position camera CamX#,CamY#,CamZ#
Position Mouse screen Width()/2,screen Height()/2
Hide mouse
Do
CONTROL CAMERA USING ARROWKEYS 0,3,2
if MouseY()<447>200
ANGX#=180+(MouseY()/2.1)
else
Position Mouse MouseX(),MouseY()
Endif
Rotate Camera ANGX#,(MouseX()/2.8),0
sync
loop

มาเข้าใจความหมายของแต่ละบรรทัดกันเลย
CamX#=250
CamY#=150
CamZ#=250
Position camera CamX#,CamY#,CamZ#
อันนี้คงไม่ยากเกินไปนะครับ ก็มีการตั้งตัวแปร CamX,CamY,CamZ แล้วกำหนดค่าให่แต่ละตัว จากนั้นก็กำหนดมุมมองของกล้องจากคำสั่ง Positiom Camera ด้วยตัวแปรทั้ง 3 ตัว ซึ่งตอนนี้ก็เป็นมุมมองเริ่มต้นของกล้องตอนที่เรา run

Position Mouse screen Width()/2,screen Height()/2
อันนี้คงเป็นการกำหนดตำแหน่งของเมาส์โดยให้อยู่ตรงกลางจอพอดีเป๊ะ เดาจากการใช้ขนาดของจอ มาหาร 2 (มั้ง) ความสูงและความยาว ก็น่าจะอยู่ตรงกลางพอดี

Hide mouse
คำสั่งนี้ใช้ซ่อนเมาส์ไม่ให้มองเห็น(แปลตรงๆครับ ภาษา basic ก็ง่ายอย่างนี้แหละ)

CONTROL CAMERA USING ARROWKEYS 0,3,2
ควบคุมกล้องอัตโนมัติด้วยปุ่มลูกศร(อันนี้ยังไม่ค่อยเข้าใจครับ)

if MouseY()<447>200
ANGX#=180+(MouseY()/2.1)
else
Position Mouse MouseX(),MouseY()
Endif
Rotate Camera ANGX#,(MouseX()/2.8),0
ควบคุมมุมกล้องโดยอ้างอิงตำแหน่งเมาส์X/Y โค้ดชุดนี้สำคัญทีเดียวเพราะใช้การอ่านตำแหน่งจากเมาส์แล้วเอามาควบคุมกล้อง

Sync
ใช้ refresh หน้าจอครับ

จากนั้นก็ลอง run ดูผลกันเลย แล้วลองขยับเมาส์ไปหลายๆทาง ใช้ร่วมกับปุ่มลูกศร
แต่มีปัญหาคือ หมุนได้ไม่ทุกทิศทาง มันจะติดอยู่นิดนึง พอดีว่ามีคนไปโพสถามไว้แล้ว และพี่ๆก็ตอบมาได้โค้ดดังนี้

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

CamX#=250
CamY#=150
CamZ#=250
Position camera CamX#,CamY#,CamZ#
Position Mouse screen Width()/2,screen Height()/2
Hide mouse
Do
rem FPS cam block
oldcamy#=camy#
oldcamx#=camx#
camy#= wrapvalue(camy#+mousemoveY()*0.2)
camx#= wrapvalue(camx#+mousemoveX()*0.2)
if camy#>70 and camy#<180>
if camy#<300>200 then camy#=299
yrotate camera curveangle(camx#,oldcamx#,25)
xrotate camera curveangle(camy#,oldcamy#,25)
rem record old position
sync
Loop

หลังจากลอง run แล้วผลที่ได้คือ สามารถหมุนได้รอบทิศจริงๆทั้ง บน ล่าง ซ้าย ขวา แต่ไม่มีโค้ดที่ใช้ keyboard นะครับ อันนี้ต้องเอาไปต่อเติมเอง ถือว่าเป็นแบบฝึกหัดละกัน

DBPro 4: เรื่องกล้อง Part 1

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 ร่วมด้วย

DBPro : การรับ Input จาก Keyboard

image

มาคราวนี้เราจะมาต่อยอดจากคราวที่แล้ว ที่ผมเขียนโค้ดเพื่อทำให้ตัว 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 แล้วละครับ

DBPro : มาสร้าง Object หมุนๆกันดีกว่า

ในบทความก่อนๆผมได้แนะนำการเข้าไปใช้และเขียนโค้ดแบบง่ายๆกันไปแล้วนะครับ คราวนี้เรามาเจาะเนื้อหาให้ลึกไปอีกนิด เป็นการใช้คำสั่งหลายๆย่าง เช่น การตั้งค่าหน้าจอ การสร้าง Object รูปทรงเรขาคณิต แล้วก็การหมุนครับ เอ้าเริ่มกันเลย
ก่อนพิมพ์ก็ลองศึกษาโค้ดแบบง่ายๆกันก่อนเลยครับ


sync on
sync rate 60


2 บรรทัดนี้จะป็นการกำหนดอัตราการ Refresh หน้าจอไว้ที่ 60fps ครับเท่าที่ศึกษาข้อมูลมา ทุกโปรแกรมควรจะมี 2 บรรทัดนี่ก่อนเลย
**หมายเหตุ บางครั้ง 2 บรรทัดนี้อาจทำให้ไม่เกิดการแสดงผลที่หน้าจอ หากหน้าจอเป็นสีดำนานๆก็ให้ลบโค้ด 2 บรรทัดนี้ออกแล้ว run อีกรอบหากลบแล้วมีภาพ ก็ไม่ต้องพิมพ์ใส่อีก ส่วนเหตุผล..อันนี้ไม่รู้ครับ แหะๆๆ


set display mode 1024,768,32


บรรทัดนี้ก็เป็นการกำหนดให้หน้าจอมีขนาด 1024 x 768 ที่ความละเอียด 32 บิต


Make object Sphere 1,100


บรรทัดนี้เป็นการสร้าง object แบบ sphere(ทรงกลม) เลข 1 ก็คือชื่ออ้างอิงจะเปลี่ยนเป้น cat dog wow อะไรก็ได้ตามใจแต่ควรเป้นชื่อที่สื่อความหมายด้วยนะครับ ส่วนเลข 100 เป็นการกำหนดขนาดหรืออาจจะเป็นรัศมีของทรงกลมที่เราสร้างครับ
การสร้างรูปทรงเรขาคณิตยังมีอีกหลายแบบครับ


MAKE OBJECT CUBE Object Number, Size Value
MAKE OBJECT BOX Object Number, Width, Height, Depth
MAKE OBJECT CYLINDER Object Number, Size Value
MAKE OBJECT CONE Object Number, Size Value
MAKE OBJECT PLAIN Object Number, Width Value, Height Value
MAKE OBJECT TRIANGLE Object Number, X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3


การใช้ก็มีหลักเหมือนกับตัวอย่างละครับ คือ
Object Number คือ ชื่อที่ใช้อ้างอิง อย่างที่ว่าไปอล้วควรเป้นชื่อที่สื่อความหมายหน่อย จะเป็นตัวเลขหรือตัวอักษรก็ได้
Size Value คือ ขนาดของวัตถุที่สร้าง ใส่เป้นตัวเลขครับ เช่น 50 ,100
Width, Height, Depth คือ ความกว้าง,ยาว,ลึก เป็นของ BOX ครับ
Width Value, Height Value คือ ความกว้าง,ยาว ใช้กับ PLAIN
ส่วน Triangle เนี่ยคงต้องลองกันเองครับ ผมยังงอยู่เลย
มาถึงตรงนี้เราก็สามารถสร้างวัตถุแบบเราคณิตได้ละ แต่ถ้าเอาโค้ดข้างบนไป run ดูผลที่ได้คือ เราจะไม่เห็นภาพครับ เพราะฉะนั้น เราก็ต้องมีโค้ดเพื่อให้การแสดงผลสมบูรณ์ โดยผมจะแยกออกเป็น 2 อย่างนะครับ คือ แบบแสดงผลนิ่งๆ กับแบบวัตถุหมุน
- แบบแสดงผลนิ่งๆ
Do
Sync
Loop

Do..Loop เป็นคำสั่งวนรอบแบบไม่สิ้นสุด คำสั่งอะไรที่อยู่ภายในจะถูกทำไปเรื่อยๆจนกว่าจะออกจากโปรแกรม
Sync เท่าที่แปลจาก Eng น่าจะได้ความหมายว่า เป็นการทำให้ภาพที่แสดงคงอยู่ไว้ตลอด
- แบบหมุนๆ


do
yrotate object 1,object angle y(1)+0.1
loop

Do…Loop ก็เป็นคำสั่งการวนรอบไม่รู้จบเช่นเดิม
YROTATE Object 1 เป็นการบอกว่าให้หมุน Object ที่ชื่อว่า 1 ก็คือ ชื่อของทรงกลมที่เราสร้างไว้ตอน Make Object
object angle y(1)+0.1 คือ กำหนดให้มีการหมุนในแนวแกน Y (แกนตั้งฉากกับพื้นโลก) เลข 1 ก็เป็นชื่อของทรงกลมที่เราตั้งไว้ +0.1 ก็เป็นการเพิ่มระยะการหมุนให้หมุนไปทีละนิด
เมื่อมาอยู่ภายใน Do…Loop ก็หมายความว่า จะทำการเพอ่มค่า0.1 ไปเรื่อยๆตามแกน Y ทำให้วัตถุหมุนไปเรื่องๆเหมือนโลกหมุนรอบตัวเอง
จากนั้นก็ save แล้วกด F5 ครับ

image

*หมายเหตุ ขั้นตอนและโค้ดที่ผมนำมาลงทั้งหมด ได้มาจากการค้นคว้าทางอินเตอร์เน็ตและก็เจอที่เป็นภาษาอังกฤษเป็นส่วนใหญ่ ซึ่งบางที่แปลออกมาความหมายไม่ถูกต้องก็ต้องขออภัยไว้ ณ ที่นี้ด้วยครับ
มือใหม่หัดเขียนครับ

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ

คราวก่อนได้พูดไปถึงเป้าหมายในการทำเกมแบบคร่าวๆคราวนี้ก็เลยมาลองใช้ DB ซะเลย จริงๆแล้วเพื่อนๆก็ลองหาข้อมูลเกี่ยวกับ DB ของไทยนี่แหละมีอยู่หลายเว็บเหมือนกัน อย่างเช่น Gamedevx.com เค้ามี e-learning ให้เรียนกันผมก็เก็บเล็กผสมน้อยเอาเว็บนู่นมารวมกับเว้บนี่ ทำไงได้ละครับ เค้าไม่ค่อยสอนตอนเริ่มต้นกัน จะเขียนทีไม่รู้จะเริ่มต้นยังไง แต่ไม่เป็นไรครับผมจะศึกษาข้อมูลเยอะๆแล้วเอามาลงบล๊อกเพื่อเป็นประโยชน์กับตัวผมเองและเพื่อนๆที่เพิ่งเริ่มต้น
ก่อนเริ่มต้น เพื่อนๆก็คงต้องมีโปรแกรมกันก่อนจะไปโหลดเอาเองจากเว็บผู้ผลิต หรือจะติดต่อผมทาง teakfalse@gmail.com ก็ได้ครับ เดี๋ยวผมจะส่งลิ้งค์ไปให้ เอาหละ ตอนนี้สมมุติว่าทุกคนมีโปรแกรมและลงครบถ้วนแล้ว ก็เข้าโปรแกรมเลยครับ หน้าตาของโปรแกรมก็จะเป็นตามรูป
ถ้าไม่มีเลขบอกบรรทัดแบบในรูปละก็ ให้เข้าไปที่ Tools >> System Options เลือก Show Line Number แล้วก็ OK

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ


ขั้นต่อไป ก็คงต้องสร้าง Project เป็นของตัวเองซะก่อน ประโยชน์ที่ได้แน่ๆคือ โปรแกรมจะสร้างโฟลเดอร์ที่เป็นชื่อโปรเจคนั้นๆไว้ให้ การส้รางก็เข้าที่ File >> New Project

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ

ก็ให้ตั้งชื่อโปรเจคตามต้องการ แล้วก็เลือกว่าจะให้สร้างโปรเจคไว้ที่ไหน
– Store it in the Projects จะสร้างไว้ที่โฟลเดอร์ Project ซึ่งอยู่ที่เดียวกับโปรแกรม
– Specify a Folder กำหนดเองว่าจะให้สร้างที่ไหน
ของผมขอเลือกกำหนดเองดีกว่า กด ok ก็จะเจอโค้ดที่เพิ่มมานิดหน่อย

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ

REM เป็นคอมเมนต์ครับ ข้อความที่อยู่ต่อจาก REM ในบรรทัดเดียวกันบรรทัดจะถือว่าไม่มีผลต่อโปรแกรม สังเกตจากสีครับ เป็นสีเทา
ตอนเริ่มแรกโปรแกรมก็จะมีการบอกชื่อโปรเจค วันที่เวลาต่างๆ
ถ้าลองย้อนกลับไปดูFolder ที่เราสร้างโปรเจคไว้ข้างในก็จะมีไฟล์ 2 ไฟล์

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ
DBA เป็นไฟล์ Source Code
DBPRO เป็นไฟล์โปรเจค
มาลองเขียนโค้ดง่ายๆกันก่อนครับ ตามแบบฉบับการเขียนโค้ดก็ต้องเขียน HELLO WORLD ออกหน้าจอให้ได้ก่อนครับ


Print “HELLO WORLD”
Wait Key

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ


ง่ายๆครับ 2 บรรทัดเอง
Print “HELLO WORLD” คือ การแสดงข้อความที่อยู่ภายใน “” ออกหน้าจอ ซึ่งก็คือ HELLO WORLD นั่นเอง
Wait Key คือ การรับข้อมูลจากkeyboard แล้วออกจากโปรแกรม
พิมพ์เสร็จก็ให้ save ก่อนครับ(กดที่รูปแผ่นดิสก์) ตามด้วยการกดปุ่ม exe ตามรูปครับหรือว่าจะกด F5 ก็ได้
ผลที่ออกมาก็จะเป็นหน้าจอสีดำ มีข้อความสีขาวอยู่ทางซ้ายบนของจอ

DarkbasicPro Mega Simple เขียนเกมแบบง่ายสุดๆ
เพียงเท่านี้คุณก็เขียน darkbasic เป็นแล้ว