‫ไม่เป็นไร.
‫ดังนั้นในการบรรยายนี้ คุณจะได้เรียนรู้เกี่ยวกับมัลติคาสต์ ผู้รับมอบสิทธิ์ และกิจกรรมต่างๆ
‫เรามาสำรวจปัญหากันก่อน
‫ลองนึกภาพว่าเรากำลังพัฒนาวิดีโอเกมตั้งแต่เริ่มต้น
‫รหัสของเราคือการรวมกันของกราฟิกและไลบรารีเสียงและตรรกะสำหรับผู้เล่นของเรา
‫มาเริ่มการเข้ารหัสกันเลย
‫พิจารณาคลาสง่าย ๆ ต่อไปนี้
‫อย่างแรกเลย เรามีคลาสการเรนเดอร์นี้ ซึ่งในตอนเริ่มเกม เราต้องการเปิดใช้งานเอ็นจิ้นการเรนเดอร์และเริ่มวาดภาพ
‫มันก็จะเรนเดอร์ แล้วก็เริ่มวาดวิชวล
‫และเมื่อเกมจบลง เราต้องการหยุดเอ็นจิ้นการเรนเดอร์ของเรา
‫ดังนั้นเราจึงมีวิธีจบเกมนี้ซึ่งจะหยุดเอ็นจิ้นการเรนเดอร์
‫ตรงนี้ผมแค่ใช้คำสั่ง console right line
‫แน่นอนว่านี่จะเป็นโค้ดที่ซับซ้อนกว่ามาก และจากนั้นก็จะทำอะไรบางอย่างได้จริง
‫ในกรณีของเรา เราแค่พยายามทำความเข้าใจแนวคิดของผู้รับมอบสิทธิ์แบบหลายผู้รับและเหตุการณ์
‫นั่นเป็นเหตุผลที่เราจะแสดงมันผ่านคำสั่งบรรทัดสีแดงบนคอนโซล
‫นั่นคือคลาสการแสดงผลของเรา
‫ทีนี้มาดูคลาสระบบเสียงของเรากัน
‫ดังนั้นในระบบเสียง เรายังมีวิธีเกมปาเป้าซึ่งจะเริ่มระบบเสียงและเล่นเสียง
‫จากนั้นเราก็มีวิธีจบเกมซึ่งโดยพื้นฐานแล้วจะหยุดระบบเสียง
‫และสุดท้าย เราก็มีผู้เล่นคนหนึ่ง และผู้เล่นก็มีชื่อผู้เล่น และเรามีตัวสร้างง่ายๆ
‫ที่เราเพิ่งตั้งชื่อนั้นตามสิ่งที่ส่งผ่านไปยังวัตถุที่สร้างขึ้น
‫และที่นี่เรายังมีเกมเริ่มต้นเช่นเดียวกับวิธีการเล่นเกม
‫ดังนั้นอันนี้จะวางไข่ผู้เล่นด้วย ID และอันนี้กำลังจะลบผู้เล่นด้วย
‫ID เฉพาะที่เรากำหนดเป็นชื่อผู้เล่น
‫นี่คือสามคลาสของเรา และฉันจะทำให้มันค่อนข้างง่ายกับพวกนี้
‫ไปที่วิธีการหลักของเรา
‫ดังนั้นภายในวิธีการหลักของเรา ตอนนี้เรากำลังจะสร้างวัตถุของระบบเหล่านั้น
‫อย่างแรกเลย ระบบเสียง และจากนั้นของเอ็นจิ้นการเรนเดอร์ ง่ายมาก แค่วัตถุธรรมดาที่นี่
‫จากนั้นเราก็สร้างผู้เล่นสองคนด้วย ID
‫เรามีผู้เล่นคนนี้คือ CAO และผู้เล่นที่สอง ซึ่งก็คือ De Silva
‫ดังนั้นเราจึงจำเป็นต้องเริ่มเอ็นจิ้นการเรนเดอร์ ระบบเสียงของเรา และวางไข่ผู้เล่นโดยการเรียกวิธีการเริ่มเกมจากแต่ละคลาส
‫ลองทำกันดูนะ
‫และฉันจะทำแบบนี้
‫ดังนั้นฉันจะบอกว่าระบบเสียง เริ่มเอ็นจิ้นการเรนเดอร์เกม อย่าเริ่มเกมตัวเล่นอย่างใดอย่างหนึ่ง
‫และให้ผู้เล่นเริ่มเกมกัน
‫แล้วเราก็แค่บอกว่าเกมกำลังทำงานอยู่ ให้กดปุ่มใดก็ได้เพื่อจบเกม
‫สิ่งที่เราอยากทำตอนนี้คือเราต้องการจบเกมโดยพื้นฐานเมื่อผู้เล่นกดปุ่มแล้ว
‫แน่นอนว่ามันจะซับซ้อนกว่านั้นมาก
‫สมมติว่าผู้เล่นกด for หรือในเมนูตัวเลือกทั้งหมด
‫เขาปิดเกม จากนั้นโค้ดถัดไปจะทำงาน
‫ดังนั้นรหัสถัดไปจะต้องเรียกเกมระบบเสียงว่าเกมโอเวอร์ วิธีการเรนเดอร์เกมเอ็นจิ้นเหนือเมธอด เช่นเดียวกับผู้เล่นหนึ่งและผู้เล่นสองเกมโอเวอร์เมธอด
‫ดังนั้นเรามาดูแลกัน
‫มาเสริมกันในนี้ด้วย
‫และอีกอย่าง เราจะต้องมีคำสั่งอ่าน เพราะไม่เช่นนั้น คำสั่งนั้นจะปิดตัวลงโดยตรง
‫ให้ฉันเพิ่มคำสั่งอ่านที่นี่อย่างรวดเร็วเพื่อให้เราสามารถกดปุ่มด้วยตนเองเพื่อปิดทุกอย่างและโดยทั่วไปเกมจะจบลง
‫ลองทำสิ่งนี้อย่างรวดเร็วและดูว่าจะเกิดอะไรขึ้น
‫เราจึงเห็นระบบเสียงเริ่มทำงาน เสียงกำลังเล่น ระบบการเรนเดอร์เริ่มทำงาน ตอนนี้เราเห็นภาพแล้วผู้เล่นก็วางไข่
‫ดังนั้นผู้เล่นที่หนึ่งและผู้เล่นที่สองจึงเกิด
‫ตอนนี้เกมกำลังทำงานและเราสามารถเล่นกับมันได้
‫และเมื่อเราต้องการจะเสร็จสิ้นเราก็กดปุ่ม
‫เลยจะกดให้ครับ
‫และคุณเห็นว่าเอ็นจิ้นการเรนเดอร์หยุด ระบบเสียงหยุด และเราลบผู้เล่นทั้งสองออก
‫นี่เป็นความพยายามอย่างมากในการตั้งค่านี้
‫ตอนนี้ฉันคิดว่าเราต้องทำเช่นนี้กับหลายสิ่งหลายอย่างและอาจผิดพลาดได้ใช่ไหม?
‫สมมติว่าเราเพิ่มระบบมากขึ้น จากนั้นระบบจะซับซ้อนมากขึ้น ดังนั้นเราจึงลืมเรียกวิธีการเริ่มเกมหรือวิธีการจบเกมได้อย่างง่ายดาย
‫หรือแย่กว่านั้น เราอาจเรียกวิธีใดวิธีหนึ่งเหล่านี้สองครั้ง ซึ่งอาจทำให้เกิดปัญหาได้ทุกประเภท
‫และต้องการให้เราวางรหัสป้องกันจำนวนมาก
‫ดังนั้นเราต้องทำให้แน่ใจจริงๆ ว่าวัตถุนี้ยังมีชีวิตอยู่หรือไม่?
‫มันเรียกวิธีนี้หรือเคยเรียกมันว่าวิธีนี้และอื่น ๆ ซับซ้อนเกินไป
‫และนี่คือจุดที่ผู้รับมอบสิทธิ์แบบหลายผู้รับมีประโยชน์
‫ผู้รับมอบสิทธิ์แบบหลายผู้รับคือผู้รับมอบสิทธิ์ที่ทำงานเป็นรายการที่สามารถเก็บข้อมูลอ้างอิงได้มากกว่าหนึ่งวิธี
‫และโดยพื้นฐานแล้ว
‫โอเค ฟังดูค่อนข้างซับซ้อน แต่มาสร้างมันขึ้นมาดีกว่า มันอาจจะสมเหตุสมผลกว่า
‫มาสร้างคลาสสแตติกที่เรียกว่า Game Event Manager กันเถอะ
‫ดังนั้น.
‫ไม่เป็นไร.
‫มาสร้างใหม่กันเถอะ
‫คลาสที่นี่.
‫และฉันจะเรียกสิ่งนี้ว่าผู้จัดการเหตุการณ์หนึ่งเกม
‫ไม่เป็นไร.
‫ดังนั้นผู้จัดการกิจกรรมเกมนี้จึงจะมีผู้แทน
‫ฉันจะสร้างตัวแทนใหม่ชื่อ Game Event
‫ดังนั้นมันจะไม่ส่งคืนอะไรเลย แต่มันจะเป็นประเภทตัวแทนและมันจะเป็นสาธารณะ เพื่อให้เราสามารถใช้มันนอกชั้นเรียนนี้ได้
‫เราได้เห็นแล้วว่าผู้ได้รับมอบหมายในงานทั่วไปเป็นอย่างไร และตอนนี้เราจะใช้ผู้รับมอบสิทธิ์นี้เพื่อให้เราเพิ่มงานได้มากกว่าหนึ่งงาน
‫ตอนนี้เรามาสร้างตัวแปรสองตัวแปรที่เรียกเมื่อเริ่มเกมและสิ้นสุดเกม และตัวแปรเหล่านี้จะเป็นประเภทเหตุการณ์ของเกม
‫ดังนั้นพวกเขาจะออกจากประเภทของผู้แทนของเรา
‫ดังนั้น นี่จะเป็นตัวแทนกิจกรรมเกม และนี่คือตัวแทนกิจกรรมเกม
‫ดังนั้นเราจึงมีตัวแปรผู้รับมอบสิทธิ์สองตัวนี้ที่เราสามารถใช้ได้
‫กลับไปที่สามชั้นเรียนของเรา
‫มาเพิ่มการเริ่มเกมและวิธีโอเวอร์เกม ในการเริ่มเกมและบนเกมโอเวอร์ผู้รับมอบสิทธิ์
‫นอกจากนี้ ไม่จำเป็นต้องเปิดเผยวิธีการเหล่านี้
‫ไปที่ระบบเสียงและตอนนี้ เรามาทำให้ทั้งสองวิธีเป็นแบบส่วนตัวกัน เพราะเราไม่ต้องเปิดเผยข้อมูลเหล่านี้
‫เนื่องจากเราจะใช้ตัวสร้างของระบบเสียงเพื่อเพิ่มหรือสมัครรับข้อมูลกิจกรรม
‫ดังนั้น ที่ที่ดีที่สุดในการเพิ่มวิธีการของเราให้กับตัวแทนผู้จัดการเกมคือจากภายในตัวสร้างเอง
‫นั่นคือสิ่งที่เรากำลังทำที่นี่
‫และเมื่อวัตถุถูกสร้างขึ้น เมธอดจะถูกเพิ่มไปยังผู้รับมอบสิทธิ์โดยอัตโนมัติ หรือกล่าวอีกนัยหนึ่ง
‫พวกเขาจะสมัครรับข้อมูล
‫ดังนั้นสิ่งที่กำลังจะเกิดขึ้นในตอนนี้คือการเพิ่มเกมเริ่มต้นและวิธีการจบเกมของเราลงในตัวจัดการเหตุการณ์ของเกมในผู้รับมอบสิทธิ์ในการเริ่มเกม
‫และเราใช้เครื่องหมายบวกเท่ากับตรงนี้เพื่อบอกว่า โอเค เราต้องการเพิ่มวิธีนี้ให้กับผู้รับมอบสิทธิ์แบบมัลติคาสต์นั้น
‫โดยพื้นฐานแล้ว เรากำลังสมัครรับข้อมูลและเรากำลังรอเหตุการณ์นั้นที่จะทริกเกอร์ เพราะเมื่อเหตุการณ์นั้นถูกทริกเกอร์
‫เมธอดของเราจะถูกเรียก
‫สิ่งที่เจ๋งก็คือตอนนี้เราสามารถทำสิ่งเดียวกันกับคลาสเอ็นจิ้นการเรนเดอร์และคลาสของผู้เล่นได้
‫สิ่งสำคัญที่นี่คือ ฉันกำลังใช้เครื่องหมายบวก ไม่ใช่แค่เครื่องหมายเท่ากับ ดังนั้นฉันไม่ได้กำหนดมัน
‫และเราจะมาดูกันว่าการเซ็นสัญญามีความหมายอย่างไรและจะส่งผลอย่างไรต่อเรา
‫แต่ที่นี่เราแค่เพิ่มอีก
‫วิธีการสำหรับนักสะสมเหตุการณ์ของเราหรือผู้จัดการกิจกรรมของเรา
‫ดังนั้นจึงรวบรวมเหตุการณ์หรือวิธีการทั้งหมดที่ควรดำเนินการ
‫ดังนั้นจึงเป็นผู้แทนหลายคน
‫ตอนนี้ มาทำสิ่งเดียวกันกับเอ็นจิ้นการเรนเดอร์ของเรากัน
‫ฉันอยากให้คุณทำเอง
‫ดังนั้นหยุดวิดีโออย่างรวดเร็วจริง ๆ แล้วลองกำหนดรหัสเดียวกันหรือสร้างรหัสเดียวกันกับที่เราทำในระบบเสียงที่นี่
‫อย่างแรกเลย ฉันแน่ใจว่าวิธีการของฉันจะเป็นแบบส่วนตัว เพราะเราไม่ต้องเปิดเผยอีกต่อไป
‫เนื่องจากไม่จำเป็น เราจะไม่โทรหาพวกเขานอกชั้นเรียนนี้
‫นั่นเป็นเหตุผลที่ควรทำให้เป็นส่วนตัวอยู่เสมอ
‫อย่างไรก็ตามสิ่งที่เราสามารถเรียกได้ว่าเป็นคอนสตรัคเตอร์ใช่ไหม?
‫ดังนั้นเราจึงสามารถสร้างออบเจ็กต์ของเอ็นจินการเรนเดอร์ของเราได้แบบสาธารณะ
‫ตอนนี้เราสามารถไปข้างหน้าและเพิ่มวิธีการเริ่มเกมของเราในการเริ่มเกมของตัวจัดการกิจกรรมเกมของเราได้เช่นกัน
‫และเช่นเดียวกันสำหรับเกมจบลง
‫ตรงนี้เราใช้บวกเท่ากับ
‫เรากำลังบอกว่าเรากำลังสมัครเข้าร่วมกิจกรรมเมื่อเริ่มเกมและในเกมโอเวอร์
‫ดังนั้นเราจึงพูดโดยพื้นฐานว่าเมื่อเหตุการณ์เริ่มต้นเกมถูกทริกเกอร์
‫เรียกอีกอย่างว่าวิธีการเริ่มเกมของเรา
‫โปรด.
‫โดยเราฉันหมายถึงเอ็นจิ้นการเรนเดอร์เริ่มวิธีเกม
‫มันก็จะเรียกวิธีนี้ว่า
‫และแน่นอนว่าถ้าเกมจบลงแล้ว วิธีการจบเกมจะถูกเรียกที่นี่
‫นั่นคือวิธีที่เราใช้แนวทางนี้
‫ตอนนี้เป็นความท้าทายเล็กน้อยสำหรับคุณ
‫โปรดทำสิ่งเดียวกันในคลาสผู้เล่นด้วย
‫ตกลง.
‫อย่างแรกเลย ฉันหวังว่าคุณจะผ่าน
‫และฉันจะไม่ทำให้แน่ใจว่าทั้งสองวิธีนี้จะเป็นแบบส่วนตัวเพราะไม่มีใครควรจะเรียกวิธีการเริ่มเกมและเกมโอเวอร์จากภายนอก
‫แต่แล้วเราก็มีคอนสตรัคเตอร์ที่นี่แล้ว และฉันจะใช้คอนสตรัคเตอร์นี้เพื่อสมัครรับเมธอด
‫on game start และ on game over ของอีเวนต์ on game start และ on game over events
‫ตอนนี้ในตัวจัดการกิจกรรมเกมของเรา
‫มาเพิ่มวิธีสแตติกสาธารณะสองวิธีเพื่อทริกเกอร์เหตุการณ์จากวิธีหลัก
‫ดังนั้นที่นี่เราก็ทำได้
‫เรียกโดยทั่วไปแล้วดำเนินการกิจกรรมนี้เพราะตอนนี้ ณ จุดนี้หลังจากที่เอ็นจิ้นการเรนเดอร์ทั้งหมดเหล่านี้ระบบเสียงและเครื่องเล่นถูกสร้างขึ้นเมื่อเหตุการณ์นี้จะถูกทริกเกอร์ก็จะดำเนินการบางอย่าง
‫แต่เราไม่ได้พูดจริงๆ ว่าจะเกิดอะไรขึ้นหากสิ่งนั้นเกิดขึ้น
‫ดังนั้นหากเหตุการณ์นั้นจะเกิดขึ้น
‫มาสร้างวิธีการแบบคงที่เพื่อทริกเกอร์เมื่อเริ่มเกม
‫ดังนั้นวิธีนี้จะตรวจสอบก่อนว่าเหตุการณ์ในการเริ่มเกมไม่ว่างเปล่า หมายความว่าวิธีการอื่นสมัครรับข้อมูลแล้ว
‫ซึ่งโดยพื้นฐานแล้วจะเป็นอย่างนั้นเมื่อเราสร้างเอ็นจิ้นการเรนเดอร์
‫และโค้ดนี้ถูกรันที่นี่ ตัวอย่างเช่น หรือระบบเสียงถูกสร้างขึ้นและโค้ดนี้ถูกรันหรือโปรแกรมเล่นถูกสร้างขึ้นและโค้ดนี้ถูกรัน
‫จากนั้นคำสั่งนี้ที่นี่จะเป็นจริง
‫ดังนั้นเหตุการณ์เกมเริ่มเกมจะไม่ว่างเปล่า ซึ่งหมายความว่าจะไม่เป็นโมฆะ
‫จากนั้นโค้ดนี้จะถูกดำเนินการที่นี่
‫ดังนั้นสิ่งที่จะทำตอนนี้คือมันบอกว่าเกมได้เริ่มต้นแล้วจากนั้นก็จะเรียกการเริ่มเกม
‫มันจะทริกเกอร์วิธีการทั้งหมดที่สมัครเข้าร่วมกิจกรรมนี้
‫ซึ่งหมายความว่าเมื่อเราเรียกวิธีนี้ที่นี่ ดังนั้นเหตุการณ์ของเกม เมื่อเราเรียกวิธีนี้ว่าวิธีนี้จะถูกดำเนินการที่นี่
‫วิธีการนี้ถูกดำเนินการเช่นเดียวกับวิธีการนี้ และเราจะเห็นว่าในอีกสักครู่เช่นกัน
‫นั่นคือจุดเริ่มต้นของการรับทริกเกอร์
‫นี่คือวิธีที่เราจะทริกเกอร์มัน
‫และเพียงแค่เรียกวิธีนี้ คุณจะเห็นว่าเรากำลังทำให้มันคงที่เหมือนที่เราทำกับเหตุการณ์ในเกม เพราะเราไม่จำเป็นต้องสร้างตัวจัดการเหตุการณ์ของเกมเพื่อเรียกวิธีการเหล่านี้
‫นั่นคือสิ่งที่เราต้องการบรรลุ และนั่นคือสาเหตุที่เราทำให้มันคงที่
‫ดังนั้นคุณไม่จำเป็นต้องสร้างวัตถุเพื่อเรียกวิธีการเหล่านี้ จากนั้นมาสร้างวิธีการคงที่อื่นสำหรับเกมของตัวเองกัน
‫และฉันอยากจะแนะนำให้คุณหยุดวิดีโอชั่วคราวและพยายามสร้างตัวเองตอนนี้อย่างรวดเร็ว
‫ตกลง.
‫ดังนั้นฉันหวังว่าคุณจะผ่านมันไป
‫โดยพื้นฐานแล้วมันเหมือนกับที่เราทำที่นี่ แต่ตอนนี้กำลังจะจบเกมที่นี่
‫ดังนั้นฉันจึงมีโมฆะคงที่สาธารณะที่ทริกเกอร์เกมโอเวอร์เมธอดที่จะทริกเกอร์เหตุการณ์และหากโอเวอร์เกมไม่เป็นโมฆะ
‫ดังนั้นหากมีวิธีการที่สมัครเข้าร่วมกิจกรรม มันจะไม่เป็นเท็จและโดยพื้นฐานแล้วมันจะเป็นจริง ซึ่งหมายความว่ารหัสนี้จะถูกดำเนินการและเมื่อจบเกมจะถูกดำเนินการ
‫ซึ่งจะเรียกวิธีการทั้งหมดของเกม หรือวิธีการทั้งหมดที่มอบหมายหรือสมัครรับข้อมูลเกมนี้ผ่านเหตุการณ์
‫ซึ่งหมายความว่าวิธีนี้ที่นี่เช่นเดียวกับวิธีนี้ และสุดท้าย แน่นอนว่าวิธีนี้
‫ดังนั้นถ้าเราจะสร้างเอ็นจิ้นใหม่ ตอนนี้เรามีเอ็นจิ้นการเรนเดอร์และออดิโอเอ็นจิ้น
‫สมมติว่าเราสร้างเอ็นจิ้นที่สามแล้วเราไม่จำเป็นต้องเรียกสิ่งนี้ด้วยตนเองอีกต่อไป แต่เราส่งมันขึ้นมาเพื่อให้เราสามารถตั้งค่าได้โดยตรงในเอ็นจิ้นที่เราบอกว่าเราต้องการสมัครรับข้อมูลเหตุการณ์นั้นและวิธีการ
‫จะถูกเรียกโดยอัตโนมัติเมื่อเราทริกเกอร์เหตุการณ์นั้น
‫ไม่เป็นไร.
‫ตอนนี้เรามาดูโค้ดของเราในวิธีหลักกันดีกว่า เพราะมันมีหลายสิ่งหลายอย่างเกิดขึ้นที่นี่
‫ตอนนี้คุณเห็นแล้วว่าโค้ดทั้งหมดนี้ใช้ไม่ได้อีกต่อไปแล้ว เพราะวิธีการเริ่มเกมทั้งหมดเหล่านี้
‫เคยเป็นแบบสาธารณะมาก่อน แต่ตอนนี้ไม่มีแล้ว
‫ดังนั้นตอนนี้พวกเขา
‫จะเป็น.
‫ก็มันเป็นส่วนตัว ก็เลยปิด
‫ตอนนี้ ไปข้างหน้า และตรวจสอบให้แน่ใจว่าเราเรียกใช้กิจกรรมเกมนี้จริง
‫ดังนั้นที่นี่เรามีตัวจัดการเหตุการณ์ของเกมและเราได้เริ่มเกมทริกเกอร์เพราะนั่นคือสิ่งที่เราต้องการทำ
‫ณ จุดนี้ใช่ไหม
‫ดังนั้นเมื่อผู้เล่นทั้งหมด ระบบทั้งหมดของคุณ และทุกอย่างพร้อมแล้ว เราก็สามารถดำเนินการต่อไปได้
‫และตอนนี้เราก็ทำแบบเดียวกันกับเกมโอเวอร์เมธอดด้านล่างได้แล้ว
‫เรามาเริ่มเกมกันต่อจากเหตุการณ์ข้างล่างนี้
‫ดังนั้นสิ่งที่จะเกิดขึ้นในตอนนี้คือมันจะช่วยให้เราแน่ใจว่าโดยพื้นฐานแล้วเรามีโค้ดที่ง่ายกว่าและสะอาดกว่ามาก
‫ดังนั้นจึงทำให้แน่ใจว่าโค้ดของเราทำงานได้อย่างไม่มีที่ติ
‫สมมติว่าเราเพิ่มผู้เล่นอื่นเข้าไป
‫เราไม่ต้องคิดเกี่ยวกับมันและเรียกวิธีการเหล่านี้ทั้งหมด
‫ใช่ครับ เรียกว่าวิธีการเริ่มเกม เรียกว่าวิธีเกมโอเวอร์ และอื่นๆ
‫เราสามารถไปข้างหน้าและสร้างผู้เล่นใหม่นี้และมันจะเรียกวิธีการตามนั้นโดยอัตโนมัติ
‫ดังนั้นคุณจะเห็นได้ว่าเกมนี้ได้เริ่มระบบเสียงและเริ่มเล่นการเรนเดอร์เสียง
‫การวาดเครื่องยนต์ ภาพจริง จากนั้นผู้เล่นวางไข่ยังคงเรียกว่าสลับเงินและ Dragon Dock
‫ตอนนี้เรามากดปุ่มกัน
‫และคุณจะเห็นว่าเกมจบลงแล้ว
‫ระบบเสียงหยุดทำงาน
‫เอ็นจิ้นการเรนเดอร์หยุดและเราลบผู้เล่นทั้งหมด
‫นั่นคือพลังของผู้รับมอบสิทธิ์แบบหลายผู้รับจริงๆ
‫สุดยอด มีประโยชน์มาก ทรงพลังมาก
‫เราจะเห็นได้ว่าผู้เล่นที่เป็นวัตถุคนที่สามของเรามีวิธีการเริ่มเกมและเกมโอเวอร์ที่เรียกโดยอัตโนมัติ
‫เนื่องจากวัตถุของเราได้รับแจ้งเมื่อมีการทริกเกอร์เหตุการณ์ทั้งในเกมและในเกมโอเวอร์
‫ตอนนี้เมื่อใช้ผู้รับมอบสิทธิ์ บางสิ่งอาจผิดพลาดได้
‫อันดับแรก มาดูข้อผิดพลาดบางประการที่อาจต้องใช้เวลาหลายชั่วโมงในการแก้ไข
‫สมมติว่าเราพลาดวิธีสมัครกิจกรรมโดยใช้เครื่องหมายบวก ลองไปที่ตัวอย่างเช่นคลาสของผู้เล่นแทนการใช้เครื่องหมายบวกเท่ากับ
‫เราจะได้โดยบังเอิญ แค่ใช้เครื่องหมายเท่ากับ
‫คอมไพเลอร์ไม่ได้บอกว่าสิ่งนี้ผิดเพราะสิ่งนี้ไม่ผิด
‫คุณยังสามารถเขียนทับเหตุการณ์ที่มีอยู่ได้ด้วยวิธีการเดียว
‫สิ่งที่เราทำที่นี่ คือ เรากำลังบอกว่าอะไรก็ตามที่มีการสมัครรับข้อมูล ณ จุดนี้
‫เราจะแทนที่มัน
‫และนั่นคือสิ่งที่เกิดขึ้นโดยทั่วไปที่นี่
‫ดังนั้น เราจะลบวิธีการทั้งหมดที่อ้างถึงในการเริ่มเกมและเหตุการณ์ในเกม และตั้งค่าผู้เล่นให้เป็นวัตถุผู้เล่นคนสุดท้ายที่แม่นยำ
‫ซึ่งสร้างขึ้นเพื่อสมัครรับข้อมูลกิจกรรมเหล่านี้เพียงรายการเดียว
‫นอกจากนี้ เนื่องจาก on game start และ on game over นั้นเป็นแบบสาธารณะจริงๆ เราจึงสามารถโทรหาพวกเขาได้โดยตรงจากทุกที่
‫สมมติว่าเราต้องการเรียกผู้จัดการเหตุการณ์ของเกมว่าเริ่มเกมจากที่นี่ จากนั้นเราก็สามารถทำได้เช่นกัน
‫ทีนี้มาลองรันโค้ดกันดู
‫นักกีฬาที่มี ID ยังคงเรียกว่า Dragon Silver Dragon Dong
‫เกมดังกล่าวได้เริ่มวางไข่เล่นกับสุนัขมังกรและดงมังกร
‫ใช่แล้ว เหตุการณ์แรกเกิดขึ้นโดยโปรแกรม Kes ของเรา และจากนั้นจากผู้เล่นคนสุดท้ายของเรา ซึ่งเป็นสุนัขมังกรของเรา
‫เรียกอีกอย่างว่า On Game Start อีกครั้ง
‫นั่นคือสิ่งที่เกิดขึ้นที่นี่โดยพื้นฐานแล้ว
‫ดังนั้นเราต้องระวังที่นี่จริงๆ
‫นั่นคือสิ่งที่สามารถแก้ไขได้ยากมาก
‫ดังนั้นตอนนี้ เราไม่สามารถทำเครื่องหมายกิจกรรมของเราเป็นส่วนตัวได้ เนื่องจากเราต้องการให้เป็นสาธารณะเพื่อสมัครรับข้อมูลในตัวสร้างคลาสของเรา
‫ตอนนี้เราใช้ชื่อเหตุการณ์เมื่อพูดถึงผู้รับมอบสิทธิ์เพราะผู้รับมอบสิทธิ์ของเรามีพฤติกรรมเหมือนเหตุการณ์อย่างแท้จริง
‫แต่แท้จริงแล้วมีผู้แทนประเภทพิเศษที่เรียกว่าเหตุการณ์ซึ่งทำขึ้นเพื่อป้องกันข้อผิดพลาดประเภทนี้
‫ไม่เป็นไร.
‫ดังนั้นตอนนี้จึงมีคีย์เวิร์ดที่สวยงามที่ช่วยเราป้องกันข้อผิดพลาดนี้ และนั่นคือคีย์เวิร์ดของอีเวนต์ เพราะโดยพื้นฐานแล้ว
‫ตัวแทนที่เราสร้างขึ้นในตัวจัดการอีเวนต์เกมของเราที่นี่ กิจกรรมเกมการศึกษาสาธารณะนี้เป็นกิจกรรม
‫ดังนั้นเราจึงสามารถใช้คีย์เวิร์ดของเหตุการณ์นี้ในที่นี้ ซึ่งจะทำให้เราไม่สามารถทำผิดพลาดได้
‫เพราะตอนนี้คุณเห็นว่าเราไม่พอใจกับสิ่งที่เราทำที่นี่ ดังนั้นเราจึงสามารถแทนที่ผู้รับมอบสิทธิ์ได้
‫แต่เมื่อพูดถึงกิจกรรม เราสามารถสมัครสมาชิกได้เท่านั้น และเราไม่สามารถเรียกกิจกรรมนี้โดยตรงได้
‫มันจะถูกเรียกใช้จากตัวจัดการกิจกรรมของเกมโดยตรง ดังนั้นเราไม่สามารถเรียกกิจกรรมได้โดยตรงอีกต่อไป
‫เนื่องจากตอนนี้ Game Start เป็นกิจกรรม และเราจะได้รับอนุญาตให้เรียกจากภายในคลาสที่มันถูกสร้างขึ้นเท่านั้น
‫และยังเป็นการบังคับให้เราปฏิบัติต่อมันเหมือนรายการ
‫จึงไม่อนุญาติให้มีเหตุการณ์ทางด้านซ้ายของเครื่องหมายเท่ากับ
‫จึงไม่อนุญาติให้ทำอะไรแบบนี้ดังที่เราเห็น
‫เอาล่ะ ตอนนี้ถ้าเราเปิดแอปอีกครั้ง คุณจะเห็นว่ามันทำงานได้อย่างไร้ที่ติ
‫ให้ฉันเรียกใช้รหัส
‫และผ่านไปได้ด้วยดี
‫นี่จึงเป็นตัวอย่างที่กระชับและค่อนข้างง่าย เนื่องจากเราพิจารณาผู้ได้รับมอบหมาย ผู้รับมอบสิทธิ์แบบมัลติคาสต์ และเหตุการณ์ในวิดีโอเดียว
‫แต่ฉันหวังว่าวิดีโอนี้จะแสดงให้เห็นชัดเจนว่าคุณมีข้อดีอะไรบ้างในการทำงานร่วมกับผู้ร่วมประชุมและกิจกรรมต่างๆ
‫และสิ่งที่ยอดเยี่ยมก็คือ ตอนนี้คุณได้เห็นวิธีสร้างผู้รับมอบสิทธิ์ของคุณเองแล้ว
‫เช่นเดียวกับกิจกรรมของคุณเองแล้ว เพราะเราจะเห็นกิจกรรมอีกมากมายในภายหลังเมื่อใช้ UI
‫ตัวอย่างเช่น เมื่อคุณคลิกบนบางสิ่ง กิจกรรมจะถูกทริกเกอร์และสามารถสมัครรับข้อมูลได้หลายรายการ
‫หลายวิธีสามารถสมัครรับข้อมูลเหตุการณ์ที่ทริกเกอร์และดำเนินการได้ครั้งเดียว
‫ตัวอย่างเช่น มีการคลิกปุ่ม หรือมีการคลิกปุ่มใดๆ บนแป้นพิมพ์
‫เอาล่ะ ทีนี้มาสรุปกันอย่างรวดเร็ว
‫เหตุการณ์เป็นรูปแบบที่จำกัดของผู้ได้รับมอบหมายซึ่งถูกบังคับให้ทำตัวเหมือนรายการ ดังนั้นเราจึงสามารถเพิ่มหรือลบวิธีการออกจากเหตุการณ์เท่านั้น
‫เพื่อให้เราสามารถสมัครหรือยกเลิกการสมัครจากเหตุการณ์โดยใช้เครื่องหมายบวกหรือลบเท่ากับ แต่ไม่ใช่เครื่องหมายเท่ากับ
‫ผู้รับมอบสิทธิ์อนุญาตการมอบหมายโดยตรงผ่านผู้รับมอบสิทธิ์ของฉันเท่ากับวิธีการของฉัน
‫การทำเช่นนี้จะแทนที่วิธีการอื่นๆ ที่เคยเพิ่มเข้าไปก่อนหน้านี้
‫ดังนั้นควรระวังที่นี่
‫นอกจากนี้ คลาสที่กำหนดให้เหตุการณ์สามารถเรียกได้จากภายนอกคลาสเท่านั้น
‫คุณสามารถลงทะเบียนและยกเลิกการลงทะเบียนได้เฉพาะวิธีการเท่านั้น
‫โอเค ฉันหวังว่าคุณจะสนุกกับวิดีโอนี้ และเพียงแค่ให้ความคิดที่ดีเกี่ยวกับกิจกรรมและผู้ได้รับมอบหมาย และฉันหวังว่าจะได้พบคุณในวิดีโอหน้า