søndag den 9. maj 2010

For at spillet skal have nogen grad af sværhed, er det nødvendigt at fjenderne følger efter spilleren. Selve bevægelsen af zombierne er identisk med den hos Player, da denne udregnes ud fra en hastighed og en retning.
For at bestemme zombiens retning imod Player, fandt vi den indbyggede funktion Math.atan2(y,x):Number, som beregner vinklen fra (0,0) til (y,x). Funktionen returnerer en radian, som kan omregnes til grader med radian*180/Math.PI. Punktet som vi ønskede at finde vinklen til, var (zombieX-playerX , zombieY-PlayerY), og zombiens retning kunne altså findes ved:
Math.atan2(this.y-_player.y, this.x-_player.x)*180/Math.PI;

Zombierne ville således altid søge at bevæge sig imod players position, hvilket giver et problem idét de ofte vil "sætte sig fast" på den modsatte side af en kasse i forhold til playeren. Det virker heller ikke super "troværdigt" at zombierne altid ved nøjagtig hvor player er - uanset om de kan se ham eller ej (Overnaturlig lugtesans?). Behovet for en kunstig intelligens implementeret på zombierne er derfor nødvendig.

Dette har vi løst ved at implementere et check hver frame, som afgør hvorvidt zombierne kan se player, eller om han er skjult bag en eller flere kasser. Figuren nedenfor viser hvordan dette check forløber:



















Der checkes hver frame på hver femte pixel i en lige linje mellem zombien og player, om koordinatsættet befinder sig indenfor en af kasserne i banen. Hvis der er klart udsyn, vil zombien sætte efter Player, og hvis udsynet er blokeret, vil zombien gå tilfældigt rundt.
Vi har yderligere implementeret en "glemme-timer", som gør at zombierne vil "glemme" at de følger efter Player hvis de mister den visuelle kontakt i seks sekunder, hvorefter de igen stener rundt og kigger efter player.

Ingen kommentarer:

Send en kommentar