บทบาทและความสาคัญของการใช้ฟิ สิกส์ ในการพัฒนาเกม หลักการของฟิ สิกส์เป็ นสิ่ งทีเ่ ป็ นทีน ่ ิยมมากในฟิ ลด ์ ของการสร้างเกมเนื่องจากจะไมมี ่ ก ี ารตอบ ่ เกมทีม โ ต้ เ ค ลื่ อ น ไ ห ว ที่ ด ี เ ล ย ถ้ า ป ร า ศ จ า ก ร ะ บ บ Physics engine ทีด ่ ี ซึ่งทุกวันนี้ก็ม ี engine ให้เลือกใช้มากมายหลายคายหลายบริ ษท ั แตละ ่ ่ บริษั ท ก็ พ ยามบ่ งบอกถึ ง ข้ อดีข องตัว เอง เช่ น ราคา ความยืดหยุนต ่ ่ างจาก ้ งาน แตต ่ ่ อการใช เมือ ่ 10 ปี ทีแ ่ ล้วอยางสิ ่ ้ นเชิง คูมื ่ อการเรียนนี้จะ เป็ นขัน ้ ตอนการสร้าง Physics engine โดยเริม ่ จากพืน ้ ฐานทางคณิตศาสตร ์ หลักการทางฟิ สิกส์ บทบาทและความสาคัญของการใช้ฟิ สิกส์ ในการพัฒนาเกม เพือ ่ เพิม ่ ความน่าสนใจและความสมจริงในการ แสดงผลของเกมของเรา 2. เพือ ่ เพิม ่ วิธก ี ารเลนเกมที แ ่ ปลกใหมยิ ้ ่ ่ ง่ ขึน 1. ที่มา: http://unity3d.com/gallery/demos/live-demos#shadows พืน ้ ฐานทางคณิตศาสตร:์ คณิตศาสตรที ์ ่ ผู้อานต องรู ่ ้ ้ Download กฎของความน่าจะเป็ น และการสุ่ม Physics in game development Introduction As you probably know, there is a lot of randomness in the world. If a golfer hits a golf ball ten times, chances are it will wind up in ten different locations when it comes to rest. At the same time, there is often some structure to the randomness. Advantage Probability techniques will allow you to build structured randomness into your games. Rather than having a flight of arrows all travel along the same trajectory, which would be boring and fake-looking, probability techniques can give the arrows a range of initial velocities and flight angles for a much more realistic appearance. Probability techniques can be used to vary the speeds of snowmobiles in a snowmobile game, how far golf balls ความน่าจะเป็ นพืน ้ ฐาน การโยนเหรียญ เช่น โยนเหรียญ สามเหรียญ พร้อมกัน 3 เหรียญ โอกาสทีจ ่ ะออกหัวพรอมกั น ้ คือเทาไหร ่ ่ 1/(2*2*2)=1/8 โยนเหรียญ สามเหรียญพรอมกั น 3 เหรียญ ้ โอกาสทีจ ่ ะออกหัวหรือกอยพร อมกั นคือเทาไหร ้ ้ ่ ่ 2/(2*2*2)=1/4 Random Number Generation การ Random ดวยค าอยู ระหว าง x ถึง y ้ ่ ่ ่ เช่น Random(10,20) แตละภาษาก็ มโี ค๊ดการเขียนแตงต นไป ่ ่ างกั ่ Java import java.util.Random; // program uses class Random { public static void main(String[] args) { double result; Random random = new Random(); result=random.nextDouble(); System.out.println(result); } } ภาษาอืน ่ ๆ rand(10,20) หรือ rand() Random Number Generation ปกติแลวการ Random นั้นจะเป็ นการ สุ่มอยู่ ้ ในช่วง 0 ถึง 1 ถ้าเราตองการ ้ การ Random คาระหว างตั วเลขสองตัวเลข ่ ่ เช่น Random คาระหว าง 10 กับ 15 ่ ่ เราจะเขียนโค๊ดกันอยางไร ่ ให้ y เทากั ่ บขอบบน ให้ x เทากั ่ บขอบลาง ่ (y-x)*Random()+x Probability Functions A probability function, also referred to as a probability distribution function, is simply a mathematical expression or geometrical curve that models the probability of an event occurring within certain dimensions. Probability functions are used in scientific modeling all the time. Typical Probability Function Cumulative Probability Function Gaussian Distribution Uniform (0-1) จ ่ ะเกิดเท การสุ่มเลขระหวาง 0 กับ 1ดวยโอกาสที ่ ้ Triangular น้อยสุดฐานนิยม มากสุด น้อยสุด น้อยสุด ฐานนิยม มากสุด ฐานนิยมากส Roulette http://www.youtube.com/ watch?v=Zf0ev4h-zfk การเขียนการสุ่มแบบ Roulette D1,25 0 D4, 25 D1, 25 D3, 25 D2, 25 D2,25 25 D3,25 50 D4,25 75 100 Roulette เพิม ่ ความซับซ้อนในการ Random ทาให้เกมดู สมจริงมากขึน ้ อีก ใช้สราง AI หรือ ปัญญาประดิษฐ ์ เช่น ้ Roulette ใน Genetics Algorithm. วิธก ี ารเขียนการทางานของ Roulette ตัวอยาง ่ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. มีทางเลือกอยู่ 4 ทาง ดวยความถี เ่ ป็ น 50,25,5 และ 20 ้ จงใช้ Roulette ทิศทางทีจ ่ ะไป matrix_pop=[50 25 5 20]; rtest = (sum(matrix_pop)).*rand(); total_pop=0; for i=1:4 total_pop=total_pop+matrix_pop(i); if (total_pop>= rtest ) matrix_return=i;// ทิศทางทีถ ่ ก ู สุ่ม break; end end การเขียนการสุ่มแบบ Roulette มีทางเลือกอยู่ 4 ทาง ดวยความถี เ่ ป็ น 50,25,5 และ 20 จง ้ ใช้ Roulette ทิศทางทีจ ่ ะไป D4, 20 D3, 5 D1, 50 D2, 25 D1,25 0 D2,25 50 D3 ,25 75 80 D4,25 100 การเขียนการสุ่มแบบ Roulette 1.สรางตั วแปรชือ ่ matrix_pop เก็บคา่ ้ ความน่าจะเป็ นทัง้ หมด D4, 20 D3, 5 D1, 50 matrix_pop =[50 25 5 20] D2, 25 2. สร้างตัวแปรชือ ่ rtest จากนั้นทาการสุ่มคาความน ่ ่ าจะเป็ น ตัง้ แต่ [0-sum(matrix_pop)] 100] สมมุตวิ าสุ ่ ่ มไดค ้ าเป็ ่ น 77.45 [0 - การเขียนการสุ่มแบบ Roulette 3. สร้างตัวแปรชือ ่ total_pop จากนั้นกาหนดให้มีคาเป็ ่ น 0 D4, 20 D3, 5 D1, 50 D2, 25 4. ทาการวนลูปการทางานของโปรแกรมเทากั ่ บ จานวนของทิศทางทัง้ หมด ้ ้ม ี 4 ทิศทาง, D1, D2, D3, D4) ์ อนี ทุ(โจทย กรอบ ข 4.1 ทาการอัพเดทคา่ total_pop=total_pop+matrix_pop[i] 4.2 ทาการตรวจสอบคาของ total_pop วา่ ่ มากกวาหรื อเทากั ่ ่ บ rtest หรือยัง ถ้าเป็ นจริง ให้ส่งคาทิ ่ ศนั้นเป็ นทิศทางสุ่มออกมา การเขียนการสุ่มแบบ Roulette D4, 20 D3, 5 D1, 50 D2, 25 รอบที่ (i) rtest total_pop rtest>=total_pop 1 72.45 0+50=50 เท็จ 2 72.45 50+25=75 เท็จ 3 72.45 75+5=80 จริง การประยุกต์ใช้งานจริง D, 20 C, 5 A, 50 B, 25 การประยุกต์ใช้งานจริง roulette1.html roulette2.html roulette3.html roulette4.html roulette5.html roulette6.html roulette7.html roulette8.html roulette9.html roulette10.html roulette11.html and roulette12.html ตั้งบอลที่ตาแหน่ ง (220,250) กด key==1 ยิงตาแหน่ ง A กด key==2 ยิงตาแหน่ ง B กด key==3 ยิงตาแหน่ ง C กด key==4 ยิงตาแหน่ ง D กด Esc กลับไปตั้งบอลใหม่ roulette13.html กด key==1 ยิงตาแหน่ ง A กด key==2 ยิงตาแหน่ ง B กด key==3 ยิงตาแหน่ ง C กด key==4 ยิงตาแหน่ ง D กด Esc กลับไปตั้งบอลใหม่