Avatar billede creldemaster Nybegynder
16. april 2011 - 03:44 Der er 1 kommentar og
1 løsning

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 :)
Avatar billede creldemaster Nybegynder
30. juli 2011 - 23:46 #1
lukket
Avatar billede creldemaster Nybegynder
30. juli 2011 - 23:46 #2
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester