bungatepijalan Moe Princess
Posts : 1487 Thanked : 30 Engine : Multi-Engine User Skill : Intermediate Type : Developer
Trophies
Awards: | Subyek: [GML] Projectile Launch Aiming Finder 2010-10-31, 20:33 | |
| - Overview:
Mau bikin game sejenis Gunbound yang pake AI? Pengen biar AI bisa nembak target dengan tepat? Ini dia algoritma AI-nya
Script: parabola - Code:
-
/* parabola: (x0,y0,x1,y1) -> (theta,v0)
Computes launch speed of the projectile (v0) with randomly given elevation angle (theta), for known the launcher coordinate (x0,y0) and the target coordinate (x1,y1); in case of no forces applied but the constant gravity. */ x0=argument0 y1=argument1 x1=argument2 y0=argument3 g=XXX //Replace with a reasonable value theta=pi/2-random(pi/2-arctan((y1-y0)/(x1-x0))) v0=(x1-x0)/cos(theta)*sqrt(.5*g/((x1-x0)*tan(theta)-(y1-y0)))
Script: parabola2 - Code:
-
/* parabola2: (x0,y0,x1,y1,ax,ay) -> (theta,v0)
Computes launch speed of the projectile (v0) with randomly given elevation angle (theta), for known the launcher coordinate (x0,y0), the target coordinate (x1,y1), and x-component and y-component of wind acceleration; in case of no another forces applied. */ x0=argument0 y1=argument1 x1=argument2 y0=argument3 ax=argument4 ay=argument5 g=XXX //Replace with a reasonable value do{ theta=random(pi/2) k=((y1-y0)/(x1-x0)-(ay-g)/ax)/(sin(theta)-(ay-g)/ax*cos(theta)) }until(ax*(x1-x0)/(1-k*cos(theta))>=0) v0=k*sqrt(.5*ax*(x1-x0)/(1-k*cos(theta))) Fungsi: menghitung laju luncur peluru (v0) dan sudut elevasi (theta) agar peluru dapat mengenai target dengan tepat
Deskripsi script: - parabola: menghitung laju luncur peluru (v0) dan sudut elevasi (theta), dalam kasus hanya gaya gravitasi yang bekerja pada peluru - parabola2: menghitung laju luncur peluru (v0) dan sudut elevasi (theta), dengan besar dan arah percepatan angin yang juga bekerja pada peluru, selain gaya gravitasi
Cara pemasangan: - Buat salah satu script baru: parabola atau parabola2 - Copas bagian code di atas ke masing2 script tersebut - Implementasikan script tersebut ke action Execute a piece of code pada Event saat peluru akan dibuat (diluncurkan). - Pada peluru yang diluncurkan, set speed=v0, direction=radtodeg(theta). Set gravity=g, jika menggunakan parabola (kasus tidak ada angin), atau set gravity=point_distance(0,0,ax,ay-g) dan gravity_direction=point_direction(0,0,ax,ay-g).
Created by: Bunga Tepi Jalan
| |
|