3

私の衝突コードはx速度を逆にして、それを3分の1に減らすことになっています。プレーヤーが「A」または「D」キーを押していないとき、速度はゆっくりとゼロに減少するはずですが、プレーヤーが速度に衝突すると.25から.70の間の小さな小数にのみ減少します(前の方向に基づいて正または負のいずれか)。

//Function to determine what to do with keys
function KeyHandler():void{
    //A Key Handlers
    if(aKeyPressed == true){
        if(Math.abs(_vx) < MaxSpeed){
            _vx += -6;
        }
    }
    //Player _vx somehow won't hit zero!!!
    else if(aKeyPressed == false){
        if(_vx < 0){
            _vx += 1;
        }
    }
    //D Key Handlers
    if(dKeyPressed == true){
        if(Math.abs(_vx) < MaxSpeed){
            _vx += 6;
        }
    }
    else if(dKeyPressed == false){
        if( _vx > 0){
            _vx += -1;
        }
    }
    //W Key Handlers
    if(wKeyPressed == true){
        if(Jumped == false){
            _vy = -15;
            Jumped = true;
        }
    }
    else if(wKeyPressed == false){

    }
}
//Code for Right Collision
    if(RightCollision){
        while(RightCollision){
            Player.x -= 0.1;
            RightCollision = false;
            if(_boundaries.hitTestPoint((Player.x + (Player.width / 2)), (Player.y - (Player.height / 2)), true)){RightCollision = true;}
        }
        _vx *= -.33
    }
    //Code for Left Collision
    if(LeftCollision){
        while(LeftCollision){
            Player.x += 0.1;
            LeftCollision = false;
            if(_boundaries.hitTestPoint((Player.x - (Player.width / 2)), (Player.y - (Player.height / 2)), true)){LeftCollision = true;}
        }
        _vx *= -.33
    }
4

1 に答える 1

3

ご了承くださいabs(-.25) + abs(.7) ~ 1.0

衝突により、速度が整数ではないもの(たとえば2 * .33 ~ .7)に設定されるため、+/-1は0をスキップして着地しません。

Math.floor簡単な修正は、たとえば、速度を整数に保つことです。(+/-速度の違いを考慮してください:floor数字を一方向にのみ移動します。)

ハッピーコーディング。


また、AS3でタイプがどのように機能するかわからintないため、調査する価値があるかもしれません。

于 2012-05-31T16:38:43.827 に答える