Flash AS3 - problem med en AI
Hej, jeg har lavet en brugerstyret bold, dertil har jeg lavet en anden bold som jeg vil have skal kunne følge den brugerstyrende bold hvilket den også gør... problemet er bare når den brugerstyrede bold bevæger sig så lagger min AI kraftigt!http://www.crelde.dk/ ---> kan den ses live, under menu punktet : Nyt flash spil in progress.
Jeg vil gerne have hjælp til at lave den røde bold meget mere flydende og smooth, så den bliver ved med at jage den brugerstyrede bold, og uden at lagge :)
Her er kildekoden:
import flash.events.*;
import flash.geom.Point;
//stage.addEventListener(KeyboardEvent.KEY_DOWN,OnKeyboardDown);
//Variabler
var sw:uint = stage.stageWidth;
var sh:uint = stage.stageHeight;
var spinSpeed:Number = 6;
var speed:Number = 8;
var enemySpeed:Number = 1.5;
//keycode array
var keyArray:Array = new Array(222);
stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp);
addEventListener(Event.ENTER_FRAME,enemymovement);
addEventListener(Event.ENTER_FRAME,UpdateScreen);
function UpdateScreen(event:Event):void
{
// Jeg gør at min user kan gå igennem siderne
if(_balluser.x>sw){
_balluser.x = 1;
}
if(_balluser.x<0){
_balluser.x = sw-1;
}
if(_balluser.y>sh){
_balluser.y = 1;
}
if(_balluser.y<0){
_balluser.y = sh-1;
}
if (isKeyDown(39) == true)
{
_balluser.rotation += spinSpeed;
}
if (isKeyDown(37) == true)
{
_balluser.rotation -= spinSpeed;
}
if (isKeyDown(38) == true)
{
var p = Point.polar(speed, _balluser.rotation * Math.PI / 180);
_balluser.x += p.x;
_balluser.y += p.y;
}
if (isKeyDown(40) == true)
{
var p = Point.polar(speed, _balluser.rotation * Math.PI / 180);
_balluser.x -= p.x;
_balluser.y -= p.y;
}
}
// TIL EKSPERTEN SPØRGSMÅLET !!! her udregner jeg vinklen fra den røde bold til den tofarvede bold
function enemymovement(event:Event):void
{
var xforskel = (_enemy.x - _balluser.x )
trace ( "x =" + xforskel )
var yforskel = ( _enemy.y - _balluser.y )
trace ( "y = " + yforskel )
var angleRad = Math.atan (yforskel / xforskel)
trace ( angleRad )
var angleDeg = angleRad * 180 / Math.PI
trace ( angleDeg )
var p = Point.polar(enemySpeed,angleDeg );
_enemy.x += p.x;
_enemy.y += p.y;
/*var prikprodukt = (_balluser.x * _enemy.x) + (_balluser.y * _enemy.y)
trace (" pp = " + prikprodukt)
var langde_balluser = (Math.sqrt( xforskel * xforskel)) + (Math.sqrt( yforskel * yforskel))
trace ( " l b " + langde_balluser)
var angle = Math.acos(prikprodukt / ( langde_balluser * langde_enemy ) )
trace ( " a rad " + angle )
var angledeg = angle * (Math.PI / 180)
trace ( " a deg " + angledeg )
*/
//( Math.acos*(((_balluser.x * _enemy.x) + (_balluser.y*_enemy.y)) /(Math.sqrt((_balluser.x*_balluser.x)+(_balluser.y*_balluser.y)))*(Math.sqrt((_enemy.x*_enemy.x)+(_enemy.y*_enemy.y)))))
}
function checkKeysDown(event:KeyboardEvent):void
{
keyArray[event.keyCode] = true;
}
function checkKeysUp(event:KeyboardEvent):void
{
keyArray[event.keyCode] = false;
}
function isKeyDown(X)
{
return keyArray[X];
}
Spillet kan findes i den ovenstående udgave på www.crelde.dk ->> "nyt flash spil in progress"
På forhånd tak for hjælpen :)