เคล็ดลับที่แท้จริงกับสิ่งนี้คือวิทยาศาสตร์ระดับมัธยมปลาย ซึ่งคุณควรจะทำ ในกรณีที่คุณไม่ได้ทำการค้นหาอย่างรวดเร็วของ Google คุณจะเริ่มต้นได้ เพื่ออธิบายว่าคุณหลีกเลี่ยงความคิด 'สามเณร' ได้อย่างไรยกตัวอย่างผู้สังเกตการณ์บนดวงจันทร์
เมื่อคุณอ่าน[change in position] = [velocity] * [time passed]
แล้วจะเห็นได้ชัดว่าจะต้องติดตามตัวแปรเหล่านั้น:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
หลังจากนั้นคุณจะใช้ความเร็วกับตำแหน่งแต่ละเฟรม:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
ตอนนี้เราต้องการเปลี่ยนความเร็วในแต่ละเฟรมเพื่อเพิ่มแรงโน้มถ่วง [change in velocity] = [acceleration] * [time passed]
อ้างอิงถึงแหล่งที่มาเดียวกันแน่นอน ดังนั้นเราจึงสามารถใช้หลักการเดียวกันนี้ได้:
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
ตอนนี้คุณต้องการวิธีสำหรับผู้เล่นในการควบคุมยานอวกาศของเขา จากการอ่านเพิ่มเติมเกี่ยวกับฟิสิกส์พื้นฐานคุณจะได้เรียนรู้ว่าการเคลื่อนไหวเป็นผลมาจากแรง - ฉันไม่สามารถหาแหล่งที่มาได้[change in acceleration] = ([force] / [mass]) * time
(เท่าที่ฉันจำได้) ดังนั้นเมื่อผู้เล่นกดปุ่มคุณจะตั้งค่าfx
และfy
ตัวแปรให้กับบางสิ่งและใช้สมการในระหว่างการอัปเดตของคุณ
ในท้ายที่สุดคุณต้องคิดเกี่ยวกับฟิสิกส์รอบวัตถุในเกมของคุณ - และแทนการพยายามที่จะทำให้พวกเขาย้ายไปในทางที่คุณจะคิดว่าแทนที่จะมองขึ้นสมการ
อนาคตหมายเหตุ:โปรดจำไว้ว่านี้เป็นมั่นเหมาะไม่ได้เป็นวิธีที่ดีที่สุดที่จะทำฟิสิกส์ (เรียกว่าออยเลอร์บูรณาการและสามารถนำไปสู่สถานการณ์บางอย่างแปลกที่อัตราเฟรมต่ำ) - คุณจำเป็นต้องมองเข้าไปในรูปแบบอื่น ๆ ของสิ่งที่ทำ (บทความที่มีค่อนข้าง ดีเขียนขึ้นบนพื้นฐานเปล่าเช่นกัน) อย่างไรก็ตามติดกับ Euler Integration ในตอนนี้เนื่องจากคุณกำลังพยายามเรียนรู้สิ่งใดสิ่งหนึ่งน้อยลง
เกมใดจะสอนวิธีคิดในความคิดที่ถูกต้อง?
คุณจะทดสอบอย่างไรว่าคุณทำสิ่งต่าง ๆ อย่างถูกต้องและด้วยความคิดที่ถูกต้อง? แทรก a Sleep(10 milliseconds)
ในลูปเกมของคุณและทุกอย่างจะยังคงเคลื่อนไหวและตอบสนองเช่นเดียวกับอัตราเฟรมเต็ม
สุดท้ายโปรดหลีกเลี่ยง 3D (และบังคับใช้ Quaternions และ Matrices) จนกว่าคุณจะมีประสบการณ์ในการทำเกม 2D เป็นจำนวนมาก ฉันอยากจะบอกว่านักพัฒนาเกมไม่กี่คนไม่รู้จริง ๆ ว่า Quaternions หรือ Matrices ทำงานอย่างไร แต่เพียงรู้วิธีใช้พวกเขา - เข้าหาพวกเขาในภายหลัง (หรือไม่เคยเกม 2D มีความสนุกมากและอาจเป็นไปได้ทีเดียว ที่ประสบความสำเร็จ) คุณไม่จำเป็นต้องรู้พีชคณิตเชิงเส้นและอื่น ๆ เพื่อทำสิ่งนี้ในระดับพื้นฐาน (แต่มันช่วยได้จริง ๆ ดังนั้นให้ไปที่ชั้นเรียนกลางคืนถ้าคุณทำได้)
โบนัสสุดท้าย:สิ่งหนึ่งที่อาจารย์สอนศิลปะของฉันบอกฉันเสมอคือ "อย่าวาดสิ่งที่คุณคิดว่าคุณเห็นวาดสิ่งที่คุณเห็น" สิ่งเดียวกันใช้ที่นี่ "อย่าทำแบบจำลองสิ่งที่คุณคิดว่าเกิดขึ้น ( object.position++
), แบบจำลองสิ่งที่เกิดขึ้น (` object.position + = ความเร็ว * เวลา) "- อย่างน้อยก็ถึงข้อ จำกัด ที่สมเหตุสมผล (คุณไม่ได้สร้างแบบจำลองระบบที่แม่นยำอย่างสมบูรณ์แบบ สิ่งที่เป็นการเลียนแบบที่ดี)