โครงการระยะแรกพยายามที่จะพอร์ตเกม Flash Incredibots 2 CE ไปยัง TypeScript และ Pixi.js.
คำแนะนำการพัฒนาสภาพแวดล้อมในสิ่งต่อไปนี้ไม่ได้ใช้กับเวอร์ชัน HTML5
ขอบคุณสำหรับการดาวน์โหลด IncredIbots! เตรียมพร้อมที่จะสร้างควบคุมและแบ่งปันการสร้างสรรค์หุ่นยนต์ของคุณเองในสนามเด็กเล่นทางฟิสิกส์!
ในการเรียกใช้ Incredibots หรือ Incredibots2 เพียงเปิดไฟล์ Incredibots.html หรือ Incredibots2.html ในเว็บเบราว์เซอร์ที่ติดตั้งแฟลชเครื่องเล่น
สนุก!
ซอร์สโค้ดสำหรับไคลเอนต์เกม IB1 และ IB2 ตั้งอยู่ในไดเรกทอรีย่อย SRC/IncredIbots และ SRC/IncredIbots2 เปิด actionscript ide ที่คุณเลือก (ฉันใช้ Flex Builder 3) และสร้างโครงการใหม่โดยใช้ไดเรกทอรีที่เหมาะสม ไฟล์แอปพลิเคชันหลักที่เรียกใช้งานหลักควรตั้งค่าเป็น main.as และฉันใช้พารามิเตอร์ -default-frame-rate 30 เป็นอาร์กิวเมนต์คอมไพเลอร์ ตรวจสอบให้แน่ใจว่าได้เชื่อมโยงไปยังไลบรารี flgui.swc ในโฟลเดอร์ LIBS ซอร์สโค้ดมีคำสั่ง [ฝัง] ไม่กี่คำซึ่งฉันเชื่อว่าอาจใช้งานได้กับ Flex Builder เท่านั้น แต่ IDE อื่น ๆ น่าจะมีวิธีการที่คล้ายกันในการเชื่อมโยงกับสินทรัพย์
เมื่อทุกอย่างถูกตั้งค่าและโครงการรวบรวมอย่างถูกต้อง IDE ควรสร้างโฟลเดอร์ bin-debug (หรือสิ่งที่คล้ายกัน) ที่มีไฟล์ SWF และไฟล์ HTML ที่ฝัง SWF ตอนนี้คุณจะสามารถเปลี่ยนแปลงรหัสและเห็นพวกเขาสะท้อนใน SWF ที่สร้างขึ้น!
ฉันจะให้ภาพรวมพื้นฐานของคลาสคีย์ในรหัสฝั่งไคลเอ็นต์โดยหวังว่าจะทำให้ชัดเจนว่าทุกอย่างทำงานอย่างไร คลาสแอปพลิเคชันหลักคือ Main.As ซึ่งดูแลการเพิ่มผู้ฟังเหตุการณ์ไปยังเวทีและพิจารณาว่าคลาส 'คอนโทรลเลอร์' ที่ทำงานอยู่ คุณสามารถนึกถึงคอนโทรลเลอร์ว่าเป็นตัวแทนของ 'หน้าจอ' แบบหนึ่ง มีหนึ่งสำหรับเมนูหลักและจากนั้นหนึ่งสำหรับหน้าจอเกมหลักพร้อมคลาสย่อยสำหรับหน้าจอเกมหลักทุกประเภท (เช่น 1 subclass ต่อบทช่วยสอน 1 สำหรับโหมด Sandbox, 1 สำหรับการสร้างโหมดท้าทาย ฯลฯ ) คลาส (น่าเสียดายที่ค่อนข้างเสาหิน) ที่จัดการฟังก์ชั่นการแก้ไขหุ่นยนต์หลักส่วนใหญ่คือตัวควบคุมซึ่งมีวิธีการตอบสนองต่อปุ่มและตัวเลือกเมนูทั้งหมดที่มีอยู่ในขณะที่แก้ไขหุ่นยนต์ อาร์เรย์ AllParts ใน controllergame แสดงถึงหุ่นยนต์ที่กำลังทำงานอยู่ในขณะนี้เป็นอาร์เรย์ของชิ้นส่วน นอกจากนี้ยังจัดการกับการเริ่มต้นและหยุดการจำลอง Box2D
แพ็คเกจชิ้นส่วนมีคำจำกัดความคลาสสำหรับชิ้นส่วน 'แต่ละประเภท' ที่มีอยู่เมื่อสร้างหุ่นยนต์ IE Circle, สี่เหลี่ยมผืนผ้า, ข้อต่อคงที่, ข้อต่อหมุน, thrusters ฯลฯ แต่ละอินสแตนซ์ของคลาสเหล่านี้มีข้อมูลทั้งหมดเกี่ยวกับส่วนนั้นเช่น Revolutejoint มีตัวแปรสมาชิกสำหรับความแข็งแรงของข้อต่อความเร็วไม่ว่าจะเปิดใช้งานปุ่มใด ๆ การตั้งค่าแซนด์บ็อกซ์ข้อ จำกัด ที่ท้าทาย)
แพ็คเกจการกระทำนั้นมีรายการการกระทำที่ผู้ใช้สามารถทำได้เมื่ออยู่ในโหมดแก้ไข การกระทำเหล่านี้ถูกใช้โดยคุณสมบัติ 'undo' และ 'redo' เท่านั้นและการกระทำแต่ละครั้งจะรู้ว่าต้องทำอะไรเพื่อเลิกทำหรือทำซ้ำ
คลาสอินพุตจัดการการโต้ตอบของแป้นพิมพ์และเมาส์ทั้งหมดด้วยองค์ประกอบที่ไม่ใช่ GUI และส่งการโทรไปยังวิธีการที่เหมาะสม (โดยปกติจะอยู่ในเกมควบคุม) เพื่อตอบสนองต่อการคลิกเมาส์ที่กำหนดหรือกดปุ่ม
คลาส Draw เกี่ยวข้องกับการวาดหุ่นยนต์ไปยังหน้าจอ มี 2 กรณีที่ต้องจัดการกับ: แก้ไขโหมดและโหมดการจำลอง เมื่ออยู่ในโหมดแก้ไขจะดึงรูปร่างทั้งหมดไปยังหน้าจอตามอาร์เรย์ปัจจุบันของชิ้นส่วน เมื่ออยู่ในโหมดซิมมันจะดึงรูปร่างขึ้นอยู่กับการวางตำแหน่งของการแสดง Box2D ของชิ้นส่วนเหล่านั้น แต่มันต้องทำให้พวกเขามีลักษณะเหมือนกันในทั้งสองกรณี ในทางทฤษฎีคลาสนี้ค่อนข้างเป็นโมดูลและควรจะสามารถเปลี่ยนไปด้วยคลาสอื่นที่ใช้สำหรับการวาดภาพบนหน้าจอได้อย่างง่ายดายในกรณีที่คุณต้องการเขียนวิธีการของคุณเองเพื่อจัดการกับกราฟิกหุ่นยนต์
แพ็คเกจ GUI มีชั้นเรียนมากมายที่สร้างแผง GUI และหน้าต่างต่างๆตลอดทั้งเกม สิ่งที่สำคัญที่สุดของสิ่งเหล่านี้น่าจะเป็นคลาส Saveloadwindow ซึ่งจัดการกับการแสดงรายการหุ่นยนต์ที่มีให้สำหรับโหลดจากเซิร์ฟเวอร์ นอกจากนี้ยังจัดการคะแนนสูงประหยัดและโหลดหุ่นยนต์รีเพลย์และความท้าทายและค้นหาหุ่นยนต์และอื่น ๆ ขณะนี้มันถูกปิดใช้งานเนื่องจากเซิร์ฟเวอร์กำลังจะลดลง แต่ถ้าเซิร์ฟเวอร์อื่นเคยขึ้นมาคลาสนี้จะต้องมีการแก้ไข คลาสอื่น ๆ ในแพ็คเกจนี้รวมถึง Guiwindow ซึ่งเป็นคลาสพื้นฐานสำหรับกล่องโต้ตอบป๊อปอัพเล็ก ๆ ทั้งหมดตลอดทั้งเกมและส่วนประกอบเช่น Guibutton, Guitextarea ฯลฯ
ในที่สุดคลาสฐานข้อมูลจัดการการโต้ตอบทั้งหมดกับเซิร์ฟเวอร์ มันมีการดำเนินการสำหรับการบันทึกและการโหลดหุ่นยนต์และรีเพลย์รวมถึงการรับรายการของแต่ละรายการเหล่านี้และสำหรับการเข้าสู่ระบบสร้างผู้ใช้ใหม่การอัปโหลด/ดาวน์โหลดคะแนนและอีกสองสาม การดำเนินการแต่ละครั้งมีฟังก์ชั่นการโทรกลับที่สอดคล้องกันซึ่งประมวลผลผลลัพธ์ที่ส่งคืนโดยเซิร์ฟเวอร์และส่งคืนข้อมูลกลับไปยังคลาสที่เหมาะสมสำหรับการแสดงผล สิ่งที่ควรทราบคือฟังก์ชั่น putxintobytearray และ extractxfrombytearray โดยที่ X เป็นหนึ่งใน 'หุ่นยนต์', 'เล่นซ้ำ' หรือ 'ความท้าทาย' ฟังก์ชั่นเหล่านี้ใช้ในการอ่านและเขียนข้อมูลในเกมไปยังหรือจากแฟลชไบต์ หุ่นยนต์รีเพลย์หรือความท้าทายจะถูกส่งไปยังเซิร์ฟเวอร์เป็นส่วนข้อมูลโพสต์ของ urlrequest ฟังก์ชั่นเหล่านี้ยังใช้โดยคุณสมบัติ 'นำเข้า' และ 'ส่งออก' เป็นวิธีที่ง่ายในการแปลงระหว่างวัตถุในเกมและข้อความ หากคุณต้องการเพิ่มคุณสมบัติที่จำเป็นต้องได้รับการบันทึกพร้อมกับหุ่นยนต์รีเพลย์หรือความท้าทายคุณจะต้องนำไปใช้กับหนึ่งในฟังก์ชั่นเหล่านี้อย่างชัดเจน
รหัสเซิร์ฟเวอร์คือทุกสิ่งที่มีอยู่ภายในโฟลเดอร์ย่อย HTDOCS มันเขียนไว้ใน PHP ทั้งหมด ฉันจะพูดถึงรหัสเซิร์ฟเวอร์ฐานข้อมูลก่อน
รหัสฐานข้อมูลอยู่ใน ./src/htdocs/incredibots [2]/ฐานข้อมูล/ไดเรกทอรี Incredibots ถูกสร้างขึ้นโดยใช้ Amazon S3 และ SimpledB เป็นแบ็กเอนด์ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ได้ที่ http://aws.amazon.com รหัสเซิร์ฟเวอร์ DB ส่วนใหญ่เขียนขึ้นโดยเฉพาะอย่างยิ่งในใจและน่าเสียดายที่ฉันไม่เคยได้รับการปรับปรุงใหม่เพื่อให้ชั้นฐานข้อมูลถูกแยกออกภายในแพ็คเกจทั่วไป ดังนั้นจึงอาจเป็นงานจำนวนมากที่จะเปลี่ยนเป็นสิ่งที่ชอบ MySQL แม้ว่ามันจะใช้งานได้เช่นเดียวกับ SimpledB และ S3 หากได้รับการดูแลอย่างเหมาะสม
โปรดทราบว่า IncredIbots ยังใช้ MySQL ผ่านฐานข้อมูลฟอรัม PHPBB เนื่องจากเรามีการเข้าสู่ระบบเพียงครั้งเดียวสำหรับทั้งเกมและฟอรัมบัญชีผู้ใช้ทั้งหมดจึงได้รับการจัดการผ่านตาราง PHPBB_USERS ของฟอรัม นี่คือเหตุผลที่รหัสฟอรัม PHPBB รวมอยู่ในแพ็คเกจฉันต้องทำการปรับเปลี่ยนรหัสฟอรัมสองสามรายการเพื่อให้การเข้าสู่ระบบครั้งเดียวทำงานได้เช่นเดียวกับคุณสมบัติอื่น ๆ เช่นความสามารถในการฝังหุ่นยนต์ภายในโพสต์ฟอรัม ที่กล่าวว่าการเข้าสู่ระบบขั้นพื้นฐานและการสร้างบัญชีใหม่ควรทำงานได้ดีกับการทำงานของ PHPBB ทุกรุ่นและไม่ควรเปลี่ยนฟังก์ชั่นการเข้าสู่ระบบเพื่อทำงานกับฐานข้อมูล/ระบบใด ๆ ที่คุณต้องการ
รหัสฐานข้อมูลปัจจุบันควรทำงานได้ดีนอกกรอบด้วยบัญชี Amazon AWS ใด ๆ สิ่งเดียวที่ควรแก้ไขคือข้อมูลรับรองในไฟล์ Common_variables.php นอกเหนือจากนั้นไฟล์ GGSCORES แต่ละไฟล์ _*. ไฟล์ PHP สอดคล้องกับหนึ่งใน 20 การดำเนินการ DB ที่ไคลเอนต์สามารถโทรได้ การโทรทั้งหมดจะถูกส่งไปยัง ggscores.php ซึ่งรวมถึงไฟล์ที่เหมาะสมที่สอดคล้องกับพารามิเตอร์ 'OP' การดำเนินการแต่ละครั้งจะพูดคุยกับฐานข้อมูล Amazon (หรือตาราง PHPBB_USERS ใน MySQL) และ echos ออกการตอบกลับสำหรับลูกค้า ข้อมูลไบนารีสำหรับหุ่นยนต์รีเพลย์และความท้าทายทั้งหมดจะถูกส่งไปยังเซิร์ฟเวอร์ผ่านข้อมูลโพสต์ HTTP และถูกบันทึกไว้ใน S3 เป็น blobs โดยมีข้อมูลเมตาจำนวนเล็กน้อยสำหรับแต่ละที่เก็บไว้ใน SimpledB
หมายเหตุ: สิ่งหนึ่งที่อาจเป็นความคิดที่ดีที่จะเพิ่มคือการตรวจสอบการตรวจสอบ MD5 เมื่อส่งข้อมูลไบนารีจากไคลเอนต์ไปยังเซิร์ฟเวอร์เพื่อป้องกันการทุจริตแพ็กเก็ต ฉันรู้ว่าสิ่งนี้เกิดขึ้นในอดีตสองสามครั้งและเมื่อเป็นเช่นนั้นหุ่นยนต์/เล่นซ้ำ/ความท้าทายที่ได้รับผลกระทบจะเสียหายและหายไปตลอดกาล ... (Dun Dun Dun!)
ส่วนที่เหลือของรหัสเซิร์ฟเวอร์มีส่วนประกอบส่วนใหญ่ของเว็บไซต์ Incredibots หน้า index.php มีรหัสเพื่อฝัง SWF และแสดงอย่างถูกต้อง ในการโฮสต์ SWF คุณจะอัปโหลดไฟล์ SWF ที่เป็นผลมาจากการสร้างไคลเอนต์ชื่อ Incredibots.swf (หรือ Incredibots2.swf) ไปยังไดเรกทอรีเดียวกับ index.php หน้า users.php ยังอยู่ที่นี่ซึ่งจะแสดงหุ่นยนต์รีเพลย์และความท้าทายทั้งหมดที่อัพโหลดโดยผู้ใช้ที่กำหนดในหน้าเว็บที่มีการจัดรูปแบบ (ค่อนข้าง)
Incredibots ได้รับการออกแบบโดย Ryan Clark ซึ่งตั้งโปรแกรมโดย Oliver Trujillo พร้อมศิลปะจาก Matt Parry เครดิตจำนวนมากควรไปที่ Erin Catto และเครื่องยนต์ฟิสิกส์ Box2D รวมถึงพอร์ตแฟลชที่เกมของเราถูกสร้างขึ้น http://www.box2d.org/ http://box2dflash.sourceforge.net/
Incredibots น่าจะเป็นเกมที่ฉันสนุกที่สุดในการทำงาน มันเป็นการระเบิดที่ตรวจสอบการสร้างสรรค์ที่บ้าคลั่งที่เกิดขึ้นโดยชุมชน Incredibots และฉันขอให้คุณทุกคนดีที่สุดในการรักษาความน่าจะเป็นไป ไชโยและอาคารบอทมีความสุข!
- โอลิเวอร์