Chat Room

บทที่ 3 Game Start & Game Over

สำหรับการเขียน Unrealscript ชุดนี้ Request Knowledge
ให้เข้าไปอ่าน บทที่ 2 ก่อนนะครับ

เรามาดู Function ที่จะใช้กันดีกว่า

EndGame คือการจบเกมครับ เป็น function ที่ทำให้ Game เวลานั้นๆ หยุดเดิน หรือ พรอต เกมเอาไว้ครับ
โดยที่ function นี้สามารถ แก้ไขได้ โดยที่เราจะใช้การ simulated ก่อน หรือว่าจะเป็น function ไปเลยก็ได้
แล้วการ super เพื่อสืบทอด function ข้างบนมาอีกที โดย function นี้จะอยู่ ใน Class GameInfo เท่านั้น

รูปตัวอย่าง ผมกระโดด พอ เวลา ครบมันก็จะหยุดเลยทันที โดยที่ผมตั้งเวลาไว้ 3 วินาที



GetNextMap จะมีวิธีการใช้ ก็คือ เอาค่า return ไปเป็นการเปลี่ยน ย้าย map ต่อไป อย่างเช่น
เราสร้างมา 2 map. map ที่ 1 คือ 1.udk map ที่ 2 คือ 2.udk
แล้วเราลองมาใช้ function นี้ดู โดย function นี้จะอยู่ ใน Class GameInfo เท่านั้น
โดยเราโผล่มาจะต้องอยู่ใน map ที่ 1.udk จึงจะเห็นผลว่า function นี้ ย้ายไป map อื่นจริงๆ

ตัวอย่างเช่น

function String GetNextMap(){
           return "2.udk";
}

CheckModifiedEndGame เป็น Function ที่ใช้คู่กับ EndGame อีกทีโดยจะใช้เชื่อม กับ GetNextMap ทำให้
เหมือนว่าเราชนะ นั่นเอง เพราะ function Winner จริงๆ มันไม่มี เลยต้องใช้แบบนี้แทนตัวนี้จะเป็นการ
ตรวจสอบก่อน จะ EndGame จริงๆ ครับจะตรวจสอบ เป็น Boolean ครับ โดย return false ก็คือจบจริงๆ
ส่วน return true ก็คือ ยังไม่จบเกม
เมื่อ function ข้างบน check แล้ว endGame แล้วแต่ตัวที่จะทำงานต่อหลังจากนี้คือ
PerformEndGameHandling ครับจะเป็นตัวที่เราสามารถเขียนต่อว่าจะทำยังไงต่อ
เช่นจะใช้การ RestartGame(); เป็นต้นโดย RestartGame(); จะเข้าไปอ่านใน function GetNextMap ครับ
จะสังเกตุได้ว่า เมื่อ function Restart ตัวนี้ทำงานแล้วเราไม่ใช่ function GetNextMap มันจะกลับมาอยู่
ใน Map เดิม ซึงเราคุณสามารถ ต่อยอดเป็นอะไรก็ได้แล้วแต่จินตนาการ คุณแล้ว
มาดูตัวอย่างกัน

function bool CheckModifiedEndGame(PlayerReplicationInfo Winner, string Reason)
ส่วน function EndGame
function EndGame(PlayerReplicationInfo Winner, string Reason)
สังเกตุว่า Parameter จะเหมือนกันดังนั้นเมื่อกำหนดให้ EndGame(none,"ค่าที่จะใช้ว่าแพ้")
เข้าไปทำการเขียน CheckModifiedEndGame ขึ้นมาใหม่ ใน CheckModifiedEndGame
เช่น


function bool CheckModifiedEndGame(PlayerReplicationInfo Winner, string Reason){
if(Reason == "Lost"){
`log("Test"); // แล้วลอง ดูที่ Log เอง
return false;
}
return true;
}

event postbeginplay(){ super.postbeginplay(); SetTimer(3,false,nameOf(Ending)); // ตัว countDown ครับ }


function Ending(){ EndGame(none,"Lost"); }



เมื่อทำการ run แล้วจะเห็นใน Log Console จะเป็น Test อยู่ดังนั้นก็แสดงว่า parameter กำหนด
string มีค่าเป็น Lost ถูกต้องนั่นหมายความว่า End จริงๆ



แล้วเราจะเขียน อย่างไรให้ชนะ หรือว่าทำเป็นด่านต่อไป


ผมจะกำหนดโดย var ละกัน
var string win;


function bool CheckModifiedEndGame(PlayerReplicationInfo Winner, string Reason){

if(Reason == "Lost"){
`log("Test"); // แล้วลอง ดูที่ Log เอง
return false;
}
return true;
}

event postbeginplay(){ super.postbeginplay(); SetTimer(3,false,nameOf(Ending)); }


function Ending(){ EndGame(none,"Lost"); }


function PerformEndGameHandling() { //super.PerformEndGameHandling(); RestartGame(); }


function string GetNextMap(){
if(win == "winner"){ return "2.udk";
} }


แล้วใน Defaultproperties เพิ่มไปว่า
win = "winner"
แล้วลองรันดูครับจะเห็นว่า มัน เปลี่ยนแผนที่จริงๆ
แล้วลองเปลี่ยนเป็นแบบนี้ดู Win = "Lose"
อ่าวแผนที่ไม่เปลี่ยน นั่นก็ถูกต้องแล้วครับ

อันนี้ผมยกตัวอย่างให้ หลังจากนั้นก็ขึ้นอยู่ที่คุณจะเอาไปใช้






สรุป
EndGame คือการจบเกมโดย จะส่งต่อไปให้ CheckModifiedEndGame
CheckModifiedEndGame คือการ เช็คว่า ทำอะไรบ้างเราสามารถตั้งเงื่อนไขข้างในได้
PerformEndGameHandling คือการทำให้เกิดการ EndGame โดยจริงๆเป็น function สุดท้ายที่ทำงาน
RestartGame คือการ ไปสอบถามข้อมูลที่มีอยู่ใน GetNextMap เมื่อได้จะทำการ Restart แล้วเริ่ม map ใหม่
GetNextMap คือการส่งค่า map โดยการ return ค่าเป็น String


1 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

รบกวนด้วยครับ พอมีวิธีที่จะให้เวลาเล่นผ่าน Map ต่อไปโดยจะต้องอยู่ในขอบเขตที่กำหนด หรือ ในวัตถุ พอจะได้ไหมครับ หรือว่าจะมีสอนอยู่ในบทถัดๆไปครับ รบกวนด้วยครับ ขอบคุณครับ