วิธีสร้างเกม Pong - hyperPong | hyperPad Documentation

Loading...

Logo
Documentationการสอนวิธีสร้างเกม Pong - hyperPong

Video_2019-07-31__5_25_47_PM.s.gif

หมายเหตุ: แฟ้มโปรเจ็กที่เสร็จสมบูรณ์สำหรับบทช่วยสอนนี้สามารถพบได้ที่ต่ำสุดของบทความนี้.

บทนำ

ในบทช่วยสอนนี้ เราจะสร้างเกมที่เหมือน Pong จากพื้นฐาน เราจะครอบคลุมฟีเจอร์และพฤติกรรมที่ซับซ้อนมากขึ้นใน hyperPad ดังนั้นบทช่วยสอนนี้จึงสมมติว่ามีความรู้เบื้องต้นเกี่ยวกับตัวแก้ไข hyperPad หากคุณคิดว่าคุณต้องทำความคุ้นเคยกับการสร้างเกมจากศูนย์ คุณสามารถตรวจสอบ คู่มือที่สมบูรณ์ - การสร้างเกมแพลตฟอร์ม ก่อน.

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

สำหรับเกม Pong ของเรา เราจะรวมตัวเลือกการเล่นในโหมดผู้เล่น 1 (ผู้เล่น vs. AI), โหมดผู้เล่น 2 (ผู้เล่น vs. ผู้เล่น) หรือโหมด 0 ผู้เล่น "ดู" (AI vs. AI).

ส่วนที่ 1: การตั้งค่าโปรเจ็กต์และเมนูหลัก

มาทำกันเถอะ เราจะเริ่มต้นโดยการสร้างโปรเจ็กต์ใหม่.

เปิดเมนูโปรเจ็กต์ใน hyperPad และแตะโปรเจ็กต์ใหม่ ตั้งชื่อโปรเจ็กต์ของคุณแล้วแตะถัดไป การจัดแนวสามารถตั้งค่าเป็นโหมดแนวนอนเริ่มต้น สำหรับบทช่วยสอนนี้ การสนับสนุนอุปกรณ์ตั้งไว้ที่ iPad 4:3 บนหน้าจอถัดไป ให้เลือก "มุมมองจากด้านบน" และให้ค่าที่เหลือเป็นค่าดีฟอลต์.

ตอนนี้เราได้โปรเจ็กต์ใหม่พร้อมใช้งานแล้ว มาตั้งค่าเมนูหลักอย่างรวดเร็วก่อนที่จะกระโดดเข้าไปในเกมเลยดีกว่า สิ่งแรกที่เราจะทำคือตั้งชื่อฉากของเราเป็น "เมนูหลัก".

แตะปุ่มเมนูโปรเจ็กต์/ฉาก และแตะปุ่มเกียร์ข้าง "ฉาก 1" ของเรา.

Photo_2019-07-10__5_32_10_PM.s.jpg

Photo_2019-07-10__5_34_50_PM.s.jpg

แตะตัวเลือกการตั้งค่าและเปลี่ยนชื่อฉากของเราเป็น "เมนูหลัก". แตะบันทึกเพื่อบันทึกและปิดหน้าต่างการตั้งค่า.

Photo_2019-07-10__5_36_34_PM.s.jpg

ถัดไป เพื่อความเป็นธรรมชาติในเกมย้อนยุคในยุคแรก ๆ เช่น Pong ในตู้เกม เราสามารถตั้งค่าสีพื้นหลังเป็นสีดำ.

แตะปุ่มการตั้งค่าสถานที่และเลือกพื้นหลัง แตะปุ่ม "เปลี่ยนสี" และตั้งค่าเป็นสีดำ (#000000FF).

Photo_2019-07-10__5_41_52_PM.s.jpg

Photo_2019-07-10__5_43_22_PM.sjpg

ตอนนี้ให้เราเพิ่มป้ายชื่อไปยังเมนูหลักของเรา แตะปุ่มวัตถุพิเศษและเลือกป้ายชื่อ.

Photo_2019-07-15__2_45_50_PM.s.jpg

Photo_2019-07-15__2_46_33_PM.s.jpg

กรอกรชื่อเกมของคุณในช่องข้อความ ("hyperPong" ได้ถูกกรอกไว้สำหรับบทช่วยสอนนี้) ตั้งค่าให้ขนาดฟอนต์ใหญ่อะไรซักอย่างแต่ไม่มากเกินไป สำหรับชื่อ "hyperPong" ขนาด 72 จุดจะถือว่าดี เปลี่ยนสีเป็นสีขาว (#FFFFFFFF) และวางไว้กลางเมนูใกล้ด้านบน.

Photo_2019-07-15__2_51_39_PM.sjpg

ตอนนี้เรามีฉากเมนูหลักที่ต้องเติมเต็มด้วยปุ่มสำหรับโหมดการเล่นทั้งหมดของเรา เราจะปล่อยให้เมนูดังกล่าวตามสถานะนี้ในขณะนี้ และเราจะทำให้มันเสร็จสมบูรณ์หลังจากที่เรามีเกมที่เล่นได้.

ส่วนที่ 2: การตั้งค่าฉากเกมและแพด

แตะปุ่มเมนูโปรเจ็กต์และแตะ "เพิ่มฉาก" ชื่อมันว่า "เกม" และแตะสร้าง ตอนนี้ในฉากเกมคุณควรเห็นผืนผ้าใบว่าง ๆ เช่นเดียวกับที่ทำกับฉากเมนูหลัก ไปข้างหน้าและแตะที่ปุ่มการตั้งค่าสถานที่อีกครั้งและเปลี่ยนพื้นหลังเป็นสีดำ (#000000FF).

เริ่มต้นสร้างแพดของผู้เล่นกันเถอะ สร้างวัตถุที่ว่างโดยไปที่ปุ่มวัตถุพิเศษและเลือก "วัตถุว่าง" เปลี่ยนสีเป็นสีขาว (#FFFFFFFF) และตรวจสอบให้แน่ใจว่าแถบความทึบเต็ม.

Photo_2019-07-15__3_07_37_PM.sjpg

เปลี่ยนชื่อวัตถุเป็น "ผู้เล่น-1" และตั้งโหมดฟิสิกส์เป็นฟิสิกส์ และปล่อยให้การผ่านได้เปิดใช้งาน.

Photo_2019-07-15__3_12_23_PM.sjpg

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

ในคุณสมบัติของวัตถุผู้เล่น-1 ไปที่แท็บการเปลี่ยนแปลงและตั้งค่าสเกล X ให้เป็น 25% และย้ายไปทางด้านซ้ายของสนามเกม.

Photo_2019-07-15__3_37_01_PM.sjpg

ต่อไปเราจะเพิ่มบางตัวควบคุมให้กับแพดของเราเพื่อให้มันเคลื่อนที่ได้ โดยที่เราเลือกแพดให้ไปที่ตัวแก้ไขพฤติกรรมโดยกลับไปที่แท็บฟิสิกส์.

Photo_2019-07-15__5_40_57_PM.sjpg

วางพฤติกรรม Joystick Analog ซึ่งพบได้ในหมวดการโต้ตอบ (ถ้าคุณไม่สามารถหามันได้ คุณอาจต้องแตะที่แท็บขั้นสูง). สิ่งนี้จะสร้างจอยสติ๊กให้คุณโดยอัตโนมัติในตัวแก้ไขฉาก.

แต่เราไม่ต้องการให้แพดเคลื่อนที่ได้โดยแค่การเคลื่อนที่แบบจอยสติ๊กเท่านั้น เราต้องการให้ AI ทำการเคลื่อนที่ได้ด้วยเช่นกัน.

ภายใต้หมวดส่วนบุคคล ให้วางกล่อง Container ลงไป นี่จะใช้เก็บทิศทางที่แพดจะเคลื่อนที่แบบนี้ ทำให้ไม่ว่าจะถูกควบคุมโดยผู้เล่นที่จอยสติ๊กหรือ AI ที่ทำการคำนวณ ค่าสามารถเปลี่ยนได้โดยการเปลี่ยนค่าตัวแปรนี้ ค่าดีฟอลต์ควรตั้งไว้ที่ 0 และเป็นความคิดที่ดีที่จะตั้งชื่อให้น่าสนใจเพื่อให้ง่ายต่อการทำงาน "ทิศทางการเคลื่อนที่" ดูเหมือนน่าสนใจ.

Photo_2019-07-17__1_17_12_PM.sjpg

เมื่อเลือก Box Container ให้กดปุ่ม "เปลี่ยนฟิลด์การป้อนข้อมูล" และแตะใช่ นี่จะสร้างพฤติกรรม Set Input Field สำหรับกล่องคอนเทนเนอร์ซึ่งจะช่วยให้เราสามารถเปลี่ยนค่าของมันเมื่อเราต้องการ เชื่อมต่อ Set Input Field ไปยัง Joystick Analog.

Photo_2019-07-17__1_42_32_PM.sjpg

Photo_2019-07-17__1_43_28_PM.sjpg

เมื่อเลือกพฤติกรรม Set Input Field ให้ลากค่าผลลัพธ์จาก Joystick Analog ลงในฟิลด์ New Value เลือกคุณสมบัติ "y" ตอนนี้กล่องผู้กำกับทิศทางการเคลื่อนที่จะติดตามความสูงที่ผู้เล่นเลื่อนจอยสติ๊กขึ้นหรือลง (แกน y).

Photo_2019-07-17__1_44_16_PM.sjpg

ตอนนี้เราต้องติดตามความระยะการเคลื่อนที่ขึ้นหรือลงด้วยจอยสติ๊ก เราต้องการรีเซ็ตค่าของมันให้เป็น 0 หากผู้เล่นปล่อยจอยสติ๊ก ไม่เช่นนั้นแพดจะยังคงเคลื่อนที่ต่อไปในทิศทางสุดท้ายที่มันจำได้.

ภายใต้หมวดการโต้ตอบให้เพิ่มพฤติกรรม Stopped Touching และแตะมันเพื่อเปิดคุณสมบัติของมัน โดยค่าเริ่มต้นมันจะติดตามเมื่อผู้เล่นหยุดสัมผัสแพด แต่เราต้องการติดตามเมื่อผู้เล่นหยุดสัมผัสจอยสติ๊ก.

แตะคุณสมบัติของวัตถุเพื่อเปลี่ยนมันและเลือกจอยสติ๊ก คุณอาจต้องเลือกชั้น UI ทั่วไปเพื่อให้สามารถเลือกได้ เมื่อเลือกแล้วให้แตะปุ่มตรวจสอบ พฤติกรรมควรจะแสดงให้เห็นว่าจอยสติ๊กเป็นวัตถุที่ติดตามอยู่.

Photo_2019-07-17__1_47_54_PM.sjpg

Photo_2019-07-17__1_48_31_PM.sjpg

แตะบน Set Input Field ที่เราได้ทำไว้ก่อนหน้านี้และทำให้มันซ้ำกัน โดยที่ Set Input Field สำเนานั้นเชื่อมต่อกับพฤติกรรม Stopped Touching และตั้งค่าคุณสมบัติ New Value ของมันเป็น 0.

Photo_2019-07-17__1_50_08_PM.sjpg

Photo_2019-07-17__1_52_22_PM.sjpg

ตอนนี้ตัวแปร Move Direction ของเราจะติดตามการเคลื่อนที่ขึ้นและลงของจอยสติ๊ก และรีเซ็ตให้เป็น 0 เมื่อตัดการเชื่อมต่อจอยสติ๊ก นั่นทำให้เรามีวิธีที่ยอดเยี่ยมในการบอกแพดว่าเราจะทำยังไงต่อไป ดังนั้นให้เราดำเนินการและกำหนดการเคลื่อนที่ให้กับแพดกันเถอะ.

ภายใต้หมวดส่วนบุคคลให้ดรอปลงพฤติกรรม Timer ในคุณสมบัติให้ตั้งค่าเวลาเป็น 0 ตัวตั้งเวลานี้จะทำการถ่ายทอดข้อมูลบ่อยที่สุดที่มันสามารถทำได้ (ต่อเฟรมหนึ่งครั้ง) ซึ่งจะทำให้เรามีโอกาสอัปเดตการเคลื่อนที่ของแพดได้บ่อยครั้ง.

Photo_2019-07-17__2_27_54_PM.sjpg

ก่อนที่จะตั้งค่าความเร็วของแพด เราต้องการให้แน่ใจว่าค่าของกล่อง Move Direction ถูกจำกัดในช่วงที่เหมาะสม โดยระมัดระวังไม่ให้สูงหรือต่ำเกินไป ไม่เช่นนั้นแพดจะเคลื่อนที่เร็วเกินไปในบางกรณี.

ภายใต้หมวด Logic ให้วางพฤติกรรม Minimum และ Maximum เชื่อมโยงพฤติกรรม Minimum ไปยังตัวตั้งเวลา และพฤติกรรม Maximum ไปยัง Minimum คุณควรมีบางสิ่งที่ดูเหมือนอย่างนี้:

Photo_2019-07-17__2_30_08_PM.sjpg

ในคุณสมบัติพฤติกรรม Minimum ตั้งค่าค่าตัวแรกเป็นค่าผลลัพธ์ของพฤติกรรม Move Direction และค่าตัวที่สองเป็น 1.

พฤติกรรม Minimum นี้จะส่งค่าต่ำสุดที่มันได้รับดังนั้นหากค่าทิศทางการเคลื่อนที่สูงกว่า 1 มันจะส่งออก 1 ไม่เช่นนั้นมันจะส่งออกค่าทิศทางการเคลื่อนที่.

Photo_2019-07-17__2_31_06_PM.sjpg

ในคุณสมบัติของพฤติกรรม Maximum ตั้งค่าค่าตัวแรกเป็นผลลัพธ์ของ Minimum และค่าตัวที่สองเป็น -1.

พฤติกรรม Maximum นี้จะส่งค่าที่สูงที่สุดที่มันได้รับ ดังนั้นหากค่าทิศทางการเคลื่อนที่ต่ำกว่า -1 มันจะส่งออก -1 ไม่เช่นนั้นมันจะส่งออกค่าของ Minimum (ซึ่งคือ 1 หรือค่าทิศทางการเคลื่อนที่ ซึ่งมีค่าต่ำกว่า).

Photo_2019-07-17__2_32_46_PM.sjpg

ทั้งหมดนี้หมายความว่าค่าผลลัพธ์ของ Maximum เป็นค่าของ Move Direction ที่อยู่ระหว่าง -1 และ +1 ทำให้เราสามารถควบคุมความเร็วที่แพดสามารถย้ายได้!

ช่วงจาก -1 ถึง +1 ใช้งานได้ง่าย แต่จะช้าเกินไปหากเราใช้ค่าดังกล่าวโดยตรงเป็นความเร็วของแพด.

ภายใต้หมวด Logic อีกครั้งวางพฤติกรรม Multiply Values และเชื่อมโยงกับพฤติกรรม Maximum สำหรับค่าตัวแรกตั้งไว้เป็นค่าผลลัพธ์ของพฤติกรรม Maximum สำหรับค่าตัวที่สองเราสามารถตั้งค้าให้เป็นค่าที่ดี "ความเร็วสูงสุด".

ตอนนี้ตั้งค่าเป็น 20 หากคุณคิดว่าแพดเคลื่อนที่ช้าหรือเร็วเกินไปในภายหลัง คุณสามารถตั้งค่านี้ให้มีค่าต่ำกว่าหรือสูงกว่านี้ได้.

Photo_2019-07-17__2_34_52_PM.sjpg

พฤติกรรม Multiple Values ตอนนี้ให้ช่วงความเร็วที่ดีสำหรับการทำงาน ตั้งแต่ -20 ถึง +20.

ตอนนี้เป็นเวลาที่ดีที่จะตั้งค่าความเร็วของแพด ภายใต้หมวดฟิสิกส์ให้เพิ่มพฤติกรรม Set Velocity และเชื่อมโยงกับพฤติกรรม Multiply Values ตั้งค่าฟิลด์ "x" เป็น 0 และฟิลด์ "y" เป็นผลลัพธ์ของพฤติกรรม Multiply Values.

Photo_2019-07-17__2_37_11_PM.sjpg

ลองเล่นมันสิ! เมื่อคุณเล่นเกม แพดจะต้องเคลื่อนที่เมื่อคุณเคลื่อนที่จอยสติ๊กขึ้นและลง.

Video_2019-07-17__2_39_15_PM.sgif

ตามที่คุณน่าจะสังเกตเห็นในระหว่างการทดสอบ ไม่มีอะไรหยุดแพดให้ไม่ออกจากหน้าจอ ในส่วนถัดไป เราจะเพิ่มขอบเขตเพื่อให้ทุกอย่างอยู่ในมุมมอง.

ส่วนที่ 3: ขอบเขตของเกม

ก่อนที่เราจะดำเนินการกันต่อ ให้เรามีวิสัยทัศน์และพิจารณาการออกแบบเกมที่ดี แพดของผู้เล่นจะไม่อยู่ในตำแหน่งกลางของหน้าจอ แต่จะอยู่ใกล้ขอบเนื่องจากเรากำลังประกอบเกมของเรา สิ่งนี้จะกลายเป็นปัญหาขณะที่เรามีองค์ประกอบ UI (เช่นจอยสติ๊ก) ที่จะทับซ้อนกับองค์ประกอบเกมของเรา (เช่นแพด).

แทนการใช้หน้าจอทั้งหมดเป็นพื้นที่เล่นได้ เราควรสร้างขอบเขตเข้าไปเพื่อไม่ให้แพดไม่ไปอยู่ด้านล่างจอยสติ๊กซึ่งทำให้มองไม่เห็น นั่นจะทำให้เราสามารถติดตามแพดของเราใกล้ที่ด้านล่างของพื้นที่เล่นได้ง่ายกว่า เราสามารถใช้การขอบนี้เป็นขอบเขตที่แข็งแกร่งเพื่อไม่ให้องค์ประกอบของเราหลุดออกไปจากสนามเล่น.

แตะปุ่มวัตถุพิเศษและสร้างวัตถุว่างใหม่ แตะวัตถุใหม่เพื่อเปิดคุณสมบัติของมัน.

ตั้งค่าโหมดฟิสิกของมันเป็นผนัง และถอนการเลือกการผ่านออก และทำให้มันมองเห็นได้ โดยการตั้งค่าสีให้เรามองเห็นมันได้ง่าย สีเทาเข้มทึบ (#1F1F1FFF) เหมาะสมดี ตั้งค่าความเสียดทานเป็น 0% และการเด้งเป็น 100%.

Photo_2019-07-17__4_14_41_PM.sjpg

ตอนนี้ในแท็บการเปลี่ยนแปลงของผนังให้ตั้งค่าสเกล Y เป็น 200% และย้ายไปที่ด้านบนของพื้นที่หน้าจอ ขยายมันเพื่อให้พอดีกับความกว้างเต็มของพื้นที่หน้าจอ คุณยังสามารถเปิดโหมดติดตารางเพื่อช่วยให้การใส่พอดี.

Photo_2019-07-23__2_17_57_PM.sjpg

ตอนนี้ให้ทำซ้ำผนังและเคลื่อนสำเนาไปยังด้านล่าง.

ทำซ้ำอีกครั้งและตั้งค่าขนาด X ให้เป็น 200% แทน จากนั้นขยายความสูงให้พอดีกับหน้าจอและวางไปด้านซ้ายของหน้าจอ.

และอีกครั้ง ทำซ้ำผนังแนวตั้งและย้ายไปยังด้านขวาของหน้าจอ คุณควรจะมีสนามเกมที่มีการปิดกั้นทั้งหมดแล้ว:

Photo_2019-07-23__2_21_51_PM.sjpg

เมื่อคุณเล่นเกมตอนนี้ คุณอาจสังเกตได้เลยว่าคุณสามารถผ่านผนังไปได้เหมือนกับว่ายังไม่มีอยู่ นี่เกิดจากสาเหตุสองประการ; เราได้ตั้งค่าแพดให้อยู่ใน “ผ่านได้” และเรากำลังบังคับให้ความเร็วของแพดในทุกเฟรม สิ่งนี้เป็นสิ่งที่ดี เราเพียงแค่ต้องสร้างวิธีหยุดแพดไม่ให้เคลื่อนที่เข้าไปในผนัง.

สิ่งที่เราจะทำเพื่อให้เราตรวจสอบพฤติกรรมดังกล่าวคือการตรวจสอบตำแหน่งของผู้เล่นกับตำแหน่งของผนัง หากเป็นจริง ให้ผลักผู้เล่นกลับเข้าสู่สนามเล่น.

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

Photo_2019-07-23__2_31_57_PM.jpg

ในทำนองเดียวกันกับผนังที่ด้านล่าง ให้เปลี่ยนจุดยึด Y ของผนังล่างเป็น 100% ในครั้งนี้ เพื่อให้ช่วยให้ตำแหน่งของผนังส่วนล่างจะยึดไว้ที่ด้านบนสุดของมัน.

Photo_2019-07-23__2_34_05_PM.jpg

ตอนนี้เราพร้อมที่จะดำเนินการสร้างพฤติกรรมการตรวจสอบขอบของเราแล้ว แตะที่แพดและเปิดแก้ไขพฤติกรรม.

เริ่มต้นด้วยการวาง Get Bounding Box จากหมวด Logic มันจะถูกตั้งค่าให้ใช้แพดอยู่ตามค่าเริ่มต้น พฤติกรรมนี้จะให้ตำแหน่งด้านล่าง/ซ้ายและขนาดของแพด.

ถัดไปให้ดรอปพฤติกรรม Add Values จากหมวด Logic และเชื่อมต่อกับพฤติกรรม Get Bounding Box ในคุณสมบัติของ Add Values ตั้งค่าค่าตัวแรกเป็นผลลัพธ์ของ Get Bounding Box "y" และค่าตัวที่สองให้เป็นผลลัพธ์ "height".

ค่าผลลัพธ์ของการบวกจะเป็นตำแหน่งสูงสุดของแพด สำหรับการอ่านง่ายคุณอาจเปลี่ยนชื่อพฤติกรรมให้เป็นอะไรที่มีความหมาย เช่น "Add Values - Paddle Top" เพื่อให้เราสามารถเห็นสิ่งที่มันกำลังทำ.

Photo_2019-07-23__4_05_38_PM.sjpg

ตอนนี้เราจะตรวจสอบว่าแพดเคลื่อนที่เข้าสู่ผนังด้านบนหรือล่างหรือไม่ ภายใต้หมวด Transform ให้ดรอปสองพฤติกรรม Get Position และเชื่อมต่อกับพฤติกรรม Add Values อย่างขนาน.

ตั้งค่าพฤติกรรม Get Position ตัวแรกให้ติดตามผนังด้านล่างและตั้งค่าพฤติกรรม Get Position ตัวที่สองให้ติดตามผนังด้านบน คุณยังสามารถเปลี่ยนชื่อพฤติกรรมเหล่านี้เพื่อให้อ่านง่ายขึ้น ตอนนี้คุณควรมีอะไรที่ดูเหมือนอย่างนี้:

Photo_2019-07-23__4_05_38_PM.sjpg

สำหรับพฤติกรรม Get Position แต่ละอัน ให้เพิ่มและเชื่อมต่อพฤติกรรม Subtract Values จากหมวด Logic.

ในคุณสมบัติของ Subtract Values ที่เชื่อมต่อกับพฤติกรรม Get Position ของผนังด้านล่าง ตั้งค่าค่าตัวแรกเป็นค่าผลลัพธ์ "position_y" จาก Get Position (ด้านล่าง) และค่าตัวที่สองเป็นค่าผลลัพธ์จาก Get Bounding Box "y".

Photo_2019-07-23__4_08_07_PM.jpg

ตอนนี้ในคุณสมบัติของ Subtract Values อีกตัวที่เชื่อมต่อกับผนังด้านบน ตั้งค่าค่าตัวแรกเป็น "position_y" จาก Get Position (ด้านบน) และค่าตัวที่สองเป็นผลลัพธ์จาก Add Values - Player Top.

Photo_2019-07-23__4_09_09_PM.jpg

การหักลบเหล่านี้จะบอกเราว่าเราอยากจะ "ผลัก" แพดกลับเข้าไปในสนามเล่นมากแค่ไหน ตอนนี้เราเพียงแค่ต้องตรวจสอบว่าเราต้องทำหรือไม่.

ภายใต้หมวด Logic ให้ดรอปและเชื่อมต่อพฤติกรรม If สำหรับแต่ละสาขาพฤติกรรม.

สำหรับพฤติกรรม If ที่เชื่อมต่อกับสาขาผนังด้านล่างให้ตั้งค่าค่าตัวแรกเป็นผลลัพธ์ของพฤติกรรม Subtract Values ที่เชื่อมต่ออยู่ ตั้งค่าความสัมพันธ์เป็น > ("มากกว่า") และค่าตัวที่สองเป็น 0.

สำหรับพฤติกรรม If ที่เชื่อมต่อกับสาขาผนังด้านบนให้ตั้งค่าค่าตัวแรกเป็นผลลัพธ์จากพฤติกรรม Subtract Values ที่เชื่อมต่ออยู่ ตั้งค่าค่าให้ความสัมพันธ์เป็น < ("น้อยกว่า") และค่าตัวที่สองเป็น 0.

ทั้งสอง If คำสั่งนี้จะดำเนินการต่อถ้าแพดเกินแต่ละผนังที่เกี่ยวข้องอยู่.

Photo_2019-07-23__4_10_39_PM.sjpg

ถ้าแพดเกินผนัง เราต้องหยุดการเคลื่อนที่แพดจากการเคลื่อนที่ไปอีกโดยการรีเซ็ตพฤติกรรมของแพดให้เป็น 0 และจากนั้นผลักคืนไปด้านในสนาม.

ภายใต้หมวดฟิสิกส์ให้วางและเชื่อมต่อพฤติกรรม Set Velocity สำหรับแต่ละสาขา ในทั้งคู่ตั้งค่าความเร็ว X/Y เป็น 0.

Photo_2019-07-23__4_12_16_PM.sjpg

ตอนนี้เราสามารถดึงแพดกลับเข้าสู่การเล่นได้ ภายใต้หมวด Transform ให้วางพฤติกรรม Move By สำหรับแต่ละสาขา.

ในแต่ละ Move By ให้ทิ้งค่าการเลื่อน X เอาไว้ที่ 0 และตั้งค่าการเลื่อน Y ให้เป็นผลลัพธ์จาก Subtract Values ใน Branch ที่เกี่ยวข้อง จากนั้นตั้งระยะเวลาเป็น 0 วินาที (ทันที).

Photo_2019-07-23__4_14_56_PM.sjpg

Photo_2019-07-23__4_15_23_PM.sjpg

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

เพื่อความง่าย ในด้านที่สูงที่สุดของห่วงโซ่พฤติกรรมนี้ให้เพิ่มพฤติกรรม Bundle จากหมวด Custom และเชื่อมโยงมันไว้เหนือ Get Bounding Box คุณอาจตั้งชื่อว่าอะไรที่มีความหมาย เช่น "ตรวจสอบขอบ".

หมายเหตุ: พฤติกรรม "Behaviour Bundle" ไม่ได้ทำอะไรเอง และถูกใช้ที่นี่เพื่อทำเครื่องหมาย "จุดเริ่มต้น" ในการตรวจสอบว่าแพดอยู่นอกขอบเขต.

Photo_2019-07-23__4_17_37_PM.sjpg

ถัดไปภายใต้หมวด Custom ให้วางพฤติกรรม Execute Behaviour ในคุณสมบัติของมันให้แตะที่ฟิลด์ "Select Behaviour" และเลือกพฤติกรรม "ตรวจสอบขอบ" ที่เราทำไว้ เมื่อเคลื่อนที่ต่อจาก Set Velocity จากห่วงโซ่การเคลื่อนที่แพดก่อนหน้านี้ให้เชื่อมต่อ Execute Behaviour เข้ากับพฤติกรรม Set Velocity ของแพด.

Photo_2019-07-23__4_19_44_PM.sjpg

ตอนนี้ทุกครั้งที่แพดปรับความเร็วการเคลื่อนที่ Execute Behaviour จะ "กระโดด" ไปยังพฤติกรรมการตรวจสอบขอบของเรา ซึ่งจะตรวจสอบถ้าแพดเคลื่อนที่ออกจากขอบเขต!

ทดสอบมันออกและดูมันทำงาน!

ยังมีสิ่งหนึ่งที่ต้องทำก่อนที่เราจะดำเนินการต่อ ให้ย้ายแพดไปยังด้านซ้ายของสนาม.

Photo_2019-07-23__4_28_37_PM.jpg

ตอนนี้ที่เรามีพื้นที่เพียงพอให้สร้างลูกบอล!

ส่วนที่ 4: ทำลูกบอล

กลับไปในตัวแก้ไขฉาก สร้างวัตถุว่าง ตั้งค่าโหมดฟิสิกส์เป็นฟิสิกและถอนการเลือกการผ่าน เพื่อให้ลูกบอลสามารถเคลื่อนที่ได้และมีการชนจริงกับผนวก ไปที่สีให้เป็นสีขาว (#FFFFFFFF) สำหรับความง่าย คุณสามารถเปลี่ยนชื่อนี้เป็น "ลูกบอล".

Photo_2019-07-25__1_50_38_PM.sjpg

ในแท็บการเปลี่ยนแปลง ตั้งค่าขนาดให้เป็น X=25% และ Y=25% และตั้งตำแหน่งเป็น X=50% และ Y=50%.

Photo_2019-07-25__2_07_07_PM.sjpg

ถัดไปเปิดการแก้ไขพฤติกรรมของลูกบอล และให้มันเคลื่อนไหวกัน ภายใต้หมวด Custom ให้ดรอปพฤติกรรม Wait และตั้งให้เป็น 3 วินาที.

จากนั้นวางพฤติกรรม Random Number จากหมวด Logic และเชื่อมต่อกับพฤติกรรม Wait สำหรับค่าตัวแรกให้ตั้งเป็น -1.0 และค่าตัวที่สองให้เป็น 1.0. ต้องเป็นการรวม "0" เพราะจะสุ่มเลือกหมายเลขระหว่าง -1.0 ถึง 1.0 รวมถึงจุดทศนิยม หากไม่เช่นนั้นจะเลือกเพียงเลขจำนวนเต็มเท่านั้น จะใช้หมายเลขสุ่มนี้เป็น "ทิศทางการโยน" เมื่อลูกบอลเริ่มต้น.

Photo_2019-07-25__2_09_17_PM.sjpg

ถัดไปให้หยิบและเชื่อมต่อการใช้พลังจากหมวดฟิสิกส์ ตั้งค่าพลัง X=-1 และทำให้พลัง Y เป็นผลจากพฤติกรรม Random Number สิ่งนี้จะทำให้ลูกบอลเคลื่อนที่ไปในทิศทางแต่ 1 นิวตันจะไม่ใช่พลังงานมาก ดังนั้นเราควรเปลี่ยนตัวคูณเช่นกัน ตั้งค่าให้เป็น 150 และทดสอบเกมเพื่อดูว่าช้าหรือเร็วจนเกินไปหรือไม่ ถ้าใช่คุณสามารถเปลี่ยนค่าตัวคูณนี้ตามที่คุณต้องการ ลูกบอลควรเริ่มเคลื่อนที่หลังจาก 3 วินาทีเมื่อเล่น นั่นเหมือนถูกเสิร์ฟ.

Photo_2019-07-25__2_09_55_PM.sjpg

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

กลับไปยังพฤติกรรมของบอล วางไว้ที่ไหนสักแห่งเป็นพฤติกรรม Lock Rotation ใต้หมวด Transform และทดสอบใหม่ ตอนนี้ลูกบอลจะไม่หมุนออกจากการควบคุมอีกต่อไป.

Photo_2019-07-25__2_23_21_PM.sjpg

ก่อนที่เราจะเริ่มเพิ่มพฤติกรรมสำหรับการชนกับแพด กลับไปยังตัวแก้ไขฉาก ให้แตะที่แพด และในคุณสมบัติแพดให้ไปที่แท็บแท็ก ในช่องข้อความให้พิมพ์ "แพด" และกดปุ่ม + เพื่อเพิ่มแท็กเข้ากับแพด.

Photo_2019-07-25__2_25_56_PM.sjpg

ตอนนี้กลับไปที่ตัวแก้ไขพฤติกรรมของบอล ภายใต้หมวดวัตถุให้ดรอปพฤติกรรม Collided ที่ใดก็ได้ ในคุณสมบัติของพฤติกรรมนั้นให้แตะที่แท็บแท็กและเลือกแท็ก Paddle ที่เราสร้างขึ้น ตอนนี้เมื่อใดก็ตามที่ลูกบอลชนกับวัตถุใด ๆ ที่มีแท็ก "Paddle" เหตุการณ์นี้จะถูกดำเนินการ.

สิ่งที่เราต้องการทำคือการปรับเปลี่ยนความเร็วของลูกบอลในทิศทาง X ของมัน นั่นคือถ้าลูกบอลเคลื่อนที่ไปทางซ้ายมันจะเริ่มเคลื่อนที่ไปทางขวา และในทางกลับกัน เรายังต้องการให้ลูกบอลเคลื่อนที่เร็วขึ้นเล็กน้อยกว่าก่อนหน้านี้ ดังนั้นในแต่ละรอบลูกบอลจะค่อย ๆ เร็วขึ้นไป.

เชื่อมต่อไปยังพฤติกรรม Collided ให้ดรอปพฤติกรรม Get Velocity จากหมวดฟิสิกส์ หลังจากนั้นให้เชื่อมต่อพฤติกรรม Multiply Values จากหมวด Logic ตั้งค่าค่าตัวแรกเป็นผลลัพธ์ "velocity_x" จาก Get Velocity สำหรับค่าตัวที่สองให้ตั้งค่าให้เป็น -1.03 ผลลัพธ์ของค่า multiply นี้จะเป็นความเร็ว X เชิงลบของลูกบอล และยังมีการเพิ่มความเร็วประมาณ 3% อีกด้วย เรามาใช้การเปลี่ยนแปลงนี้ในลำดับถัดไป.

Photo_2019-08-01__5_27_07_PM.jpg

เชื่อมต่อกับพฤติกรรม Multiply Values ให้ดรอปพฤติกรรม Set Velocity จากหมวดฟิสิกส์ ตั้งค่าความเร็ว X เป็นผลลัพธ์ของ Multiply Values และปล่อยให้ความเร็ว Y เป็นความเร็วที่มีอยู่.

Photo_2019-08-01__5_37_26_PM.jpg

ตอนนี้เมื่อคุณเล่น ลูกบอลควรจะเด้งไปมา ชนกับแพดและกลับทิศทางพร้อมกับความเร็วที่เพิ่มขึ้นเล็กน้อย.

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

เพื่อให้รู้ว่าควรโยนลูกบอลไปทิศทางไหน เราจะต้องได้รับความแตกต่างในตำแหน่งระหว่างลูกบอลและแพด ภายใต้หมวด Transform ให้ดรอปพฤติกรรม Get Position ทั้งสองตัวและเชื่อมต่อพวกเขาเป็นลำดับภายใต้ Set Velocity.

พฤติกรรม Get Position ตัวแรกจะติดตามลูกบอลตามค่าเริ่มต้น เปลี่ยน Get Position ตัวที่สองให้เป็นค่าผลลัพธ์ "ObjectB_ID" จากเหตุการณ์ Collided.

หมายเหตุ:"ObjectB" ในที่นี้จะเป็นแพดที่ชนกันเนื่องจากมันเป็นวัตถุที่สองที่เกี่ยวข้องซึ่งเกี่ยวข้องในเหตุการณ์การชน ขณะที่วัตถุแรก ("ObjectA") จะเป็นลูกบอล.

Photo_2019-07-25__4_50_08_PM.sjpg

ดรอปและเชื่อมต่อพฤติกรรม Subtract Values จากหมวด Logic ตั้งค่าค่าตัวแรกเป็นผลลัพธ์ "position_y" ของ Get Position ที่ติดตามบอล ตั้งค่าค่าตัวที่สองเป็นผลลัพธ์ "position_y" ของ Get Position ที่ติดตามแพด.

Photo_2019-07-25__4_56_07_PM.sjpg

ถัดไปให้ดรอปและเชื่อมต่อพฤติกรรม Apply Force จากหมวดฟิสิกส์ ตั้งค่าค่าพลัง X เป็น 0 และพลัง Y เป็นผลลัพธ์ของ Subtract Values ค่าตำแหน่งเพียงอย่างเดียวดังนั้นเราจึงต้องเพิ่มค่าตัวคูณให้ด้วย โปรดทดสอบด้วยตัวคูณ 50 และดูว่าเป็นอย่างไรในเกม.

Photo_2019-07-25__4_59_42_PM.sjpg

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

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

หลังจาก Apply Force ให้วางและเชื่อมต่อพฤติกรรม Get Velocity จากหมวดฟิสิกส์เพื่อให้ได้ความเร็วใหม่ของลูกบอล ภายใต้ที่เหลือให้ดรอปและเชื่อมต่อพฤติกรรม Maximum และ Minimum ไปยังลำดับกันจากหมวด Logic.

ในคุณสมบัติ Maximum ตั้งค่าค่าตัวแรกเป็นผลจาก "velocity_x" จาก Get Velocity จากนั้นตั้งค่าตัวที่สองเป็น -25 ซึ่งหมายถึงค่าสูงสุด.

Photo_2019-07-25__5_30_37_PM.sjpg

ในคุณสมบัติ Minimum ตั้งค่าค่าตัวแรกเป็นผลที่ได้จาก Maximum และตั้งค่าตัวที่สองเป็น 25. สิ่งนี้จะทำให้ได้ผลลัพธ์ที่ดีที่สุดซึ่งค่าที่สูงกว่าค่าใดค่าหนึ่ง.

Photo_2019-07-25__5_37_16_PM.sjpg

ใน Minimum ของใหม่ให้ตั้งค่าค่าตัวแรกเป็นผลจาก Minimum และค่าตัวที่สองเป็น 10. สิ่งนี้จะทำให้เกิดระดับขั้นต่ำในย่าน -10 ถึง 10 อย่างไรก็ไม่ต้องการความเร็วลูกบอลที่สูงมาก.

Photo_2019-07-25__5_38_32_PM.sjpg

ตอนนี้ที่เรามีค่าขีดจำกัดความเร็วสำหรับลูกบอล ให้เราใช้มันแล้ว ให้ดรอปและเชื่อมต่อพฤติกรรม Set Velocity จากหมวดฟิสิกส์ ในคุณสมบัติของมันให้ตั้งค่าความเร็ว X ให้เป็นผลของ Minimum ขีดจำกัดความเร็ว X และตั้งค่าความเร็ว Y ให้เป็นผลของ Minimum ขีดจำกัดความเร็ว Y.

ตอนนี้ไม่ว่านานแค่ไหนคะแนนการแข่งขันลูกบอลจะไม่สามารถไปถึงความเร็วที่สูงนี้ให้นอกจากนี้ ความเร็ว Y ก็ยังถูกจำกัดดังนั้นลูกบอลไม่เคลื่อนไหวจนเกินไป.

Photo_2019-07-30__3_06_29_PM.sjpg

Video_2019-07-29__2_51_58_PM.sgif

ส่วนที่ 5: ปัญญาประดิษฐ์แพด

แม้ว่าการทำซ้ำแพดและสร้างแพดที่เล่นได้อยู่แล้วจะเป็นเรื่องที่ยอมรับได้ แต่จะไม่ดีกว่าหรือที่จะมีตัวเลือกต่อสู้กับ AI แทนที่จะเป็น 2 ผู้เล่น? แน่นอนว่ามันจะ! ในส่วนนี้เราจะมาดูการให้ปัญญาประดิษฐ์ให้กับแพดและให้ผู้ใช้ตัวเลือกในการเล่นโหมด 2 ผู้เล่นหรือเล่นกับ AI.

ด้วยระบบที่เราตั้งค่าให้กับการเคลื่อนที่ของผู้เล่น - นั่นคือการเปลี่ยนแปลงค่าตรง Move Direction - การนำ AI ไปใช้จึงทำได้ง่าย เพียงแค่ไม่ใช้จอยสติ๊ก แพดจะเปลี่ยน Move Direction ขึ้นอยู่กับตำแหน่งบอลว่ามันอยู่ด้านบนหรือล่าง.

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

ที่เราจะกำหนดให้ AI เป็น:

  • AI จะเคลื่อนที่เฉพาะเมื่อบอลกำลังมาทางพวกเขา.
  • Move Direction จะเป็นผลลัพธ์ระหว่างตำแหน่ง Y (แนวตั้ง) ของลูกบอลและแพดบวกความเปลี่ยนแปลงเล็กน้อย.
  • เมื่อใดก็ตามที่ลูกบอลชนกับสิ่งใด เข้าการแพด ค่าตัวแปรความเปลี่ยนแปลงของ AI จะเปลี่ยนไป.
  • ความเปลี่ยนแปลงจะพึ่งพาความเร็วของบอล; บอลที่เคลื่อนไปเร็วขึ้น และมีค่าซับซ้อนโดยมาก AI จะต้องประเมินไม่ตรงกัน.

ดูเหมือนว่าง่ายพอ มาทำกันเถอะ.

แตะที่แพดแล้วเข้าไปที่การแก้ไขพฤติกรรม หาสถานที่ว่าง ๆ และดรอปพฤติกรรม Timer ใหม่จากหมวด Custom ตั้งเวลาเป็น 0 วินาที เพื่อความเข้าใจง่าย เปลี่ยนชื่อให้เป็น "AI Think".

หมายเหตุ: หากคุณได้รับข้อความ ณ ที่นี้หรือในอนาคตเกี่ยวกับการมีตัวตั้งเวลาเกินที่เวลา 0 วินาที คุณสามารถละเว้นมันไปได้อย่างปลอดภัยจนกว่าจะมีน้อย.

Photo_2019-07-29__2_20_45_PM.sjpg

เริ่มต้น เราต้องตั้งค่าการเคลื่อนที่ของ Move Direction เป็น 0 วิธีนี้ทำให้แพดหยุดเคลื่อนเมื่อเราไม่ต้องการให้มันเคลื่อนที่เลย แตะพฤติกรรม Move Direction ที่เราทำในส่วนที่ 2 และแตะที่ปุ่ม Change Input Field เพื่อสร้างพฤติกรรม Set Input Field ใหม่ เชื่อมต่อพฤติกรรม Set Input Field ไปกับ AI Think Timer ตั้งค่าค่า New Value ให้เป็น 0.

Photo_2019-07-29__2_21_11_PM.sjpg

Photo_2019-07-29__2_21_37_PM.sjpg

ภายใต้หมวด Transform ให้ดรอปพฤติกรรม Get Position สองตัวและเชื่อมต่อกันจากการดำเนินการที่สองของ AI Think Timer หนึ่งในนั้นให้ติดตามบอลและปล่อยอีกตัวติดตามแพด สำหรับการอ่านง่าย คุณสามารถเปลี่ยนชื่อพฤติกรรมเหล่านี้ได้ดีขึ้น เช่นนี้:

Uq5g-w7Q.jpg

วิธีนี้ค่าทิศทาง Move Direction ที่ตั้งค่าก่อนจะไปในที่ต่าง ๆ ที่อื่น.

ต่อไปให้ดรอปและเชื่อมต่อพฤติกรรม Get Velocity จากหมวดฟิสิกส์และให้ติดตามบอล ในพฤติกรรมทั้งสามนี้เรามีข้อมูลที่จำเป็นทั้งหมดเพื่อให้ตรวจสอบว่าลูกบอลกำลังมาในทิศทางแพดหรือไม่.

ดรอปและเชื่อมต่อพฤติกรรม If จากหมวด Logic สร้างค่าตัวแรกเป็น "position_x" จาก Get Position สำหรับแพด ตั้งค่าความสัมพันธ์ใน If เป็น “Is Less Than” (<) และค่าตัวที่สองให้เป็น "position_x" จาก Get Position สำหรับบอล.

ถ้าสถานะนี้จริง นั่นหมายถึงว่าแพดอยู่ข้างซ้ายของลูกบอล ในอีกนัยหนึ่งลูกบอลอยู่ทางด้านขวาของแพด.

Photo_2019-07-29__2_31_22_PM.sjpg

เรายังต้องมีสาขาสำหรับเมื่อลูกบอลอยู่ทางด้านขวาของแพดด้วยอีกด้วย ดรอปและเชื่อมต่อพฤติกรรม If อีกตัวที่ด้านขวาของพฤติกรรม If ตัวแรกจะเปลี่ยนให้เป็นพฤติกรรม Else If และจะดำเนินการหากพฤติกรรม If ตัวแรกไม่เป็นจริง คุณไม่จำเป็นต้องเปลี่ยนคุณสมบัติใดๆ ของมัน.

Photo_2019-07-29__2_33_26_PM.sjpg

ตอนนี้เรายังสามารถตรวจสอบว่าลูกบอลเคลื่อนที่ไปทางแพดหรือไม่.

ดรอปพฤติกรรม If อีกตัวและเชื่อมต่อไปยังพฤติกรรม If แรก ตั้งค่าค่าตัวแรกเป็นผล "velocity_x" จาก Get Velocity สำหรับบอล และตั้งค่าความสัมพันธ์เป็น "น้อยกว่า" (<) และค่าตัวที่สองเป็น 0 ถ้าพฤติกรรม If นี้จริงหมายความว่าลูกบอลเคลื่อนที่ไปทางซ้าย ซึ่งนั่นคือสิ่งที่เราต้องการเพราะพฤติกรรม If ที่แล้วจะเกิดขึ้นเมื่อบอลอยู่ทางด้านขวาของแพด ดังนั้นบอลจึงต้องกำลังมาทางแพด.

Photo_2019-07-29__2_37_58_PM.sjpg

ตอนนี้เราต้องประพฤติแบบเดียวกันในส่วน"Else If" แตะพฤติกรรม If ใหม่และคัดลอกมัน ติดตั้งมันเข้าสาขา Else If ตั้งค่าความสัมพันธ์เป็น "มากกว่า" (>) กล่าวคือ หากลูกบอลอยู่ทางซ้ายของแพด พฤติกรรม If นี้จะทำงานและตรวจสอบว่าบอลกำลังเคลื่อนที่ไปทางขวา หากเป็นจริง ลูกบอลจึงมากำลังมาทางแพด.

Photo_2019-07-29__2_39_52_PM.sjpg

ถ้าการดำเนินงานไปสุดของคำสั่ง If นี้ AI อนุญาตให้เคลื่อนที่! ตอนนี้เราต้องปรับ Move Direction ขึ้นอยู่กับว่าลูกบอลอยู่ในแนวตั้งเท่าใด.

ภายใต้หมวด Logic ให้ดรอปพฤติกรรม Subtract Values เชื่อมต่อไปยัง If ของพฤติกรรมต่าง ๆ สร้างค่าตัวแรกเป็น "position_y" จากพฤติกรรม Get Position สำหรับบอล, เมื่อค่าตัวที่สองเป็น "position_y" จากพฤติกรรม Get Position สำหรับแพด.

เมื่อท่านใช้ทิศทางนี้ คุณจะเบี่ยงเบนระหว่างแพดและบอลในแกนแนวตั้ง และแพดจะพยายามเคลื่อนที่ได้เร็วขึ้นหากบอลอยู่ห่างจากแพดมาก ค่าที่นี้เพียงเล็กน้อย และลงทะเบียน Move Direction ของแพด!

คลิกที่ Move Direction และสร้างพฤติกรรม Set Input Field โดยการแตะปุ่ม Change Input Field เชื่อมต่อกับ Subtract Values และตั้งค่าคุณสมบัติ New Value ให้เป็นผลจากพฤติกรรม Subtract Values.

Photo_2019-07-29__2_44_24_PM.sjpg

ทดสอบมัน และแพดควรมีชีวิตชีวาทำงานอย่างอิสระเลย!

Video_2019-07-29__2_51_58_PM.sgif

คุณอาจสังเกตเห็นของ AI เล่นอย่างดี มีไม่ค่อยแบทแพ็ตมาก โดยแก้ไขและปรับตัว AI เราต้องเพิ่มความเปลี่ยนแปลงลงไป; การให้ความสุ่มต้นของผู้เล่น AI จะแข่งขันในแทนที่ Avatar - ทั้งนี้เพราะเมื่อเกิดการพุ่งมาจริง ๆ AI จะเคลื่อนที่ด้วยความไม่แน่นอน.

กลับไปที่แพด. ดรอปพฤติกรรม Box Container จากหมวด Custom และตั้งชื่อว่า "Entropy" สำหรับการอ่านที่ดี ตั้งค่าให้เป็นค่าดีฟอลต์เป็น 0 จากนั้นให้ดรอปพฤติกรรม Add Values จากหมวด Logic.

ตัดการเชื่อมต่อ Subtract Values จาก Set Input Field ที่เราเพิ่งทำไว้และเชื่อมต่อ Add ระหว่างมัน ในคุณสมบัติ Add Values ให้นำค่าตัวแรกไปที่ส่วน Subtract Values ขณะที่ค่าตัวที่สองเป็นค่าที่ของ Entropy.

Photo_2019-07-29__2_58_13_PM.sjpg

Photo_2019-07-29__3_02_32_PM.sjpg

ในคุณสมบัติ Set Input Field ให=เปลี่ยนค่าของคุณจากผลของ Subtract Value ให้กลายเป็นผลของ Add Values.

Photo_2019-07-29__3_03_37_PM.sjpg

ตอนนี้ Move Direction ของแพดจะเพิ่มค่าคอนเทนเนอร์ Entropy ดังนั้นทั้งหมดที่เราต้องทำคือเก็บค่าของที่ Entropy และค่อยๆจะเพิ่มให้กับ Move Direction ทำให้มันไม่ทำให้แพดมีความไม่ถูกต้อง.

ในตอนนี้ทำให้แพดมี Spatial Logic ในกรณีที่บอลทำการชนกับอะไรเท่าไหร่ และกำหนดคุม Entropy ของ AI ด้วยความเร็วให้มากขึ้น แพดจะมีเช่นเคยถือว่าผลลัพธ์.

หา Spot ว่าง ๆ และดรอปพฤติกรรม Collided จากหมวด Objects สำหรับวัตถุตัวแรกจะเลือกลูกบอล ติดแล้วไม่เปลี่ยน object ตัวที่สอง ผลลัพธ์ทั้งสิ้นจะเหมือนกัน.

Photo_2019-07-29__3_10_25_PM.sjpg

ภาพรวมสั้นๆ จำกัดเวลาของลูกบอลก็จะเหลือค่าต่ำไปด้วย หลังจากไปได้ทุกที่จะมีปัญหาจิตใจว่าจะจัดการอย่างไรในครั้งต่อไปได้.

ให้จัดตั้งพื้นฐาน của ความคิดใกล้เคียง Spirit Pool ติดตั้งเข้าบนความบนไรเมื่อขึ้นขอบ โดนว่าสิ่งอาจเกิดได้ในคะแนนทดแทนด้วย.

ป.ล. วางอีกครั้งเกี่ยวกับการพัวพันของบอลที่ระหว่างการเคลื่อนไหวและย้ายเข้าบนอื่นๆ ไม่น่าเสียสละความถี่ เมื่อลองทดสอบที่ใช้องค์ประกอบที่ใช้ได้เราจะแจกองหมายเลข จัดการไม่เป็นที่ดี ในเวลาไม่พอ.

ใช้ได้ทั้งแฝดน้อยของลูกบอลนั้นได้ถ้าม้ามีระดับสูง หลังจากเจ้ามีอยู่บ่อยๆ ทุกๆครั้ง.

จัด ให้รีเซ็ต ระบบคาถา ได้บริหารความจำแนก และ โจมตีรวมการแจ้งให้พวกบอกแล้ว คาดการณ์ทั้งหมด.

ส่วนที่ 6: แพดที่สองและโหมดการเล่นได้

ในส่วนนี้เราจะตั้งค่า ...