เวิร์กโฟล
เวิร์กโฟลโปรเจกต์ GMS2: จากเปิดโฟลเดอร์จนถึงเทสต์ 03
สถานการณ์ โปรเจกต์ที่กล้องสั่น หลายคนยังเรียก GameMaker รุ่นปัจจุบันว่า gms2 สมมติว่าตัวละครของคุณเดินไปมาแต่กล้องสั่น เพราะตำแหน่งเก็บค่าทศนิยม คุณเปิดโฟลเดอร์โปรเจกต์ อธิบายอาการด้วยประโยคเดียวแล้วให้ PixelTread หาโค้ด ตัวเอเจนต์จะสแกนโฟลเดอร์ด้วย list_dir และ glob อ่านสคริปต์การเคลื่อนที่และกล้องด้วย read_file แล้วเสนอการแก้ไขเล็กน้อยในรูปแบบ diff ทุกอย่างจะไม่เปลี่ยนแปลงจนกว่าคุณจะตัดสินใจ ดังนั้นเซสชันแรกจึงเป็นวิธีที่ปลอดภัยในการเรียนรู้ว่าแต่ละเครื่องมือทำงานอย่างไร วงจรเดียวกันนี้ใช้ได้กับบั๊กเล็กๆ น้อยๆ ส่วนใหญ่: อธิบาย อ่าน ทบทวน เทสต์ แต่ละรอบจบลงที่ editor ซึ่งคุณกดเล่นและเห็นผลลัพธ์ด้วยตัวเอง หากการแก้ไขครั้งแรกยังไม่เพียงพอ คุณอธิบายสิ่งที่เปลี่ยนแปลงแล้วการ์ดถัดไปจะต่อยอดจากอันก่อนหน้า ขณะทำงานให้เปิดโปรเจกต์ใน editor ไว้
01 เปิดโฟลเดอร์ เลือกโฟลเดอร์โปรเจกต์ GameMaker ของคุณเป็นโฟลเดอร์ทำงานของแชท เพื่อให้เครื่องมือไฟล์สามารถเห็นสคริปต์และไฟล์ข้อความของโปรเจกต์ของคุณ เริ่มแชทใหม่สำหรับแต่ละบั๊ก ซึ่งจะทำให้ทุกการสนทนาเกี่ยวข้องกับปัญหาหนึ่งปัญหาและ diff หนึ่งชุด โฟลเดอร์ทำงานคือขอบเขตของเครื่องมือไฟล์ ดังนั้นชี้ไปที่โปรเจกต์และไม่มีอะไรอื่น สิ่งที่อยู่ภายนอกโฟลเดอร์นั้นจะไม่ครอบคลุมโดยเครื่องมือไฟล์
02 อธิบายปัญหา เขียนสิ่งที่คุณเห็นและอยู่ที่ไหน เช่น กล้องสั่นขณะที่ตัวละครหมุน และระบุสคริปต์หากคุณทราบ อาการที่ชัดเจนให้ตัวเอเจนต์มีสิ่งที่สามารถค้นหาด้วย grep เพิ่มสิ่งที่คุณลองไปแล้ว เพราะนั่นจะป้องกันไม่ให้ตัวเอเจนต์ทำซ้ำ ประโยคสั้นๆ ทำงานได้ดี
03 ทบทวน diff อ่านแต่ละการ์ด เปิด diff และยอมรับเฉพาะบรรทัดที่คุณเข้าใจ ปฏิเสธส่วนที่เหลือและอธิบายเหตุผล แล้วตัวเอเจนต์จะลองอีกครั้ง โหมด Ask first จะหยุดก่อนทุกการกระทำที่เปลี่ยนแปลงไฟล์ ดังนั้นไม่มีอะไรถูกบันทึกไว้เบื้องหลัง เปิดการ์ดที่ขยายเพื่อดู diff เต็ม ไม่ใช่เพียงบรรทัดสรุป
04 สร้างและเทสต์ รันบิลด์ของคุณใน editor ของ GameMaker เล่นห้องนั้น แล้วรายงานสิ่งที่เห็นเพื่อให้ขั้นตอนถัดไปเริ่มจากข้อเท็จจริง หากบิลด์ล้มเหลว ให้วางล็อบลงในไฟล์ในโฟลเดอร์แล้วให้ตัวเอเจนต์อ่านมัน จากนั้นบันทึกผลลัพธ์ในแชท เพื่อให้คำขอถัดไปมีจุดเริ่มต้นที่ชัดเจน รันเทสต์เดียวกันหลังการเปลี่ยนแปลงที่ยอมรับทุกครั้ง ในห้องเดิม
สคริปต์การเคลื่อนที่เล็กน้อย PixelTread · ปัดตำแหน่ง ● Ask first
ปัดตำแหน่งของผู้เล่นก่อนวาด เพื่อหยุดการสั่นของกล้อง
read_file scr_move.gmlread grep draw_sprite3 matches edit_file scr_move.gml+2 lines Shell buildexit 0 scr_move.gmlคัดลอกตัวอย่าง
// Move an object with the arrow keys
function scr_move(_speed) {
var _r = keyboard_check(vk_right);
var _l = keyboard_check(vk_left);
var _d = keyboard_check(vk_down);
var _u = keyboard_check(vk_up);
x += (_r - _l) * _speed;
y += (_d - _u) * _speed;
// keep the position on whole pixels
x = round(x);
y = round(y);
}ฟังก์ชันนี้ตรวจสอบปุ่มลูกศรด้วย keyboard_check เคลื่อน x และ y ด้วยค่าความเร็ว และปัดทั้งสองค่าเพื่อให้สไปรต์ถูกวาดบนพิกเซลเต็ม การปัดคือการแก้ไขการสั่นที่อธิบายไว้ข้างต้น สคริปต์แบบนี้คือสิ่งที่ตัวเอเจนต์สามารถเปิด เปลี่ยน และแสดงเป็น diff ได้ และคุณสามารถเทสต์ในห้องภายในหนึ่งนาที บันทึกเป็นแอตทริบิวต์สคริปต์ก่อน แล้วเปลี่ยนบรรทัดเดียวต่อครั้ง ขอให้อาเจนต์เพิ่มคอมเมนต์เหนือการเปลี่ยนแปลงแต่ละครั้งเพื่อให้คุณหาเจอภายหลัง ชื่อแทนเช่น _speed เปลี่ยนชื่อได้ง่าย
สี่งานสำหรับโปรเจกต์ที่เริ่มใน game maker studio 2 เรียนรู้โดยการแก้สคริปต์ของคุณเอง ผู้คนมักถามว่าจะเรียนรู้การเขียนโค้ด GameMaker อย่างแท้จริงได้อย่างไร และคำตอบที่ดีคือการแก้สคริปต์จริงและดูสิ่งที่เกิดขึ้น เปิดโปรเจกต์เล็กๆ แล้วขอให้อาเจนต์อธิบายสคริปต์หนึ่งบรรทัดต่อบรรทัด มันอ่านไฟล์ด้วย read_file และอ้างอิงชื่อฟังก์ชันจากคู่มือทางการโดยใช้ web_search จากนั้นขอการเปลี่ยนแปลงเล็กน้อย เช่น ความเร็วเดินที่เร็วขึ้น อ่าน diff ในโหมด Ask first ยอมรับ สร้าง และเล่น ทำซ้ำด้วยการเปลี่ยนแปลงใหม่ทุกวัน และให้อาเจนต์เขียนไฟล์บันทึกด้วย write_file เพื่อให้คุณสามารถย้อนดูได้ว่าแต่ละการแก้ไขสอนอะไรคุณ ความคืบหน้าช้าๆ ก็ยังเป็นการก้าวหน้า
วาดสไปรต์ที่มีส่วนโปร่งแสง คุณอาจต้องการทำให้เฉพาะส่วนของสไปรต์โปร่งใส เช่น ครึ่งล่างของตัวละครที่ยืนอยู่ในน้ำ ตัวเอเจนต์อ่านสคริปต์วาดของคุณด้วย read_file ค้นหาการเรียกวาดปัจจุบันด้วย grep และเสนอการเปลี่ยนแปลง edit_file ที่วาดสไปรต์เป็นสองชิ้นด้วย draw_sprite_part_ext ชิ้นหนึ่งมีค่า alpha ต่ำกว่า Plan only สามารถแสดงให้คุณเห็น 2 ชิ้นก่อน สั้นและเทสต์ได้ ยอมรับ diff รันห้อง และตรวจสอบรอยต่อระหว่างทั้งสองส่วนในระดับพิกเซล เนื่องจากช่องว่างหนึ่งพิกเซลมองเห็นได้ง่ายในการเคลื่อนไหว หากระดับน้ำขยับ ขอให้อาเจนต์ผูกการแยกกับตัวแปร
หยุดการเคลื่อนที่ก่อนชนกำแพง เพื่อหยุดการเคลื่อนที่ก่อนชนวัตถุ สคริปต์ควรตรวจสอบตำแหน่งถัดไปแล้วจึงเคลื่อนที่ ขอให้อาเจนต์อ่านสคริปต์การเคลื่อนที่ของคุณและห่อแต่ละขั้นตอนด้วยการตรวจสอบ place_meeting ที่ตำแหน่งเป้าหมาย การ์ด edit_file แสดงบรรทัดใหม่และ Shell รายงานรหัสการออกของคำสั่งบิลด์ของคุณ เดินชนกำแพงในห้อง ทบทวน diff ก่อน แล้วเทสต์ที่ความเร็วช้าและเร็ว เพราะวัตถุที่เร็วอาจยังข้ามกำแพงบางได้ และขอขั้นตอนที่เล็กลงหากเป็นเช่นนั้น เก็บห้องเทสต์ให้เล็ก มีกำแพงหนึ่งอันและผู้เล่นหนึ่งตัว
หาข้อผิดพลาดแรกในล็อบบิลด์ ล็อบบิลด์ที่ยาวทำให้บรรทัดที่สำคัญซ่อนอยู่ บันทึกล็อบเป็นไฟล์ข้อความในโฟลเดอร์โปรเจกต์ จากนั้นขอให้อาเจนต์เปิดด้วย read_file และค้นหาด้วย grep สำหรับคำว่า error มันรายงานข้อผิดพลาดแรกพร้อมกับชื่อสคริปต์และบรรทัด และสามารถอ่านสคริปต์นั้นเพื่อเสนอการแก้ไขด้วย edit_file การแก้ไขข้อผิดพลาดแรกมักจะทำให้ข้อผิดพลาดด้านล่างหายไป ยอมรับ diff ในโหมด Ask first สร้างอีกครั้ง และเปรียบเทียบล็อบใหม่กับล็อบเก่าเพื่อดูว่าจำนวนข้อผิดพลาดลดลงหรือไม่ ทำซ้ำจนล็อบสะอาด