As3 Как добавить ускорение к ограниченному движению? - PullRequest
0 голосов
/ 18 декабря 2011

В игре-лабиринте я пытаюсь добавить ускорение движению моего персонажа.Поскольку персонаж не должен проходить сквозь стены, функция движения и результат удара находятся в одной и той же функции.

Я попытался добавить ускорение в операторах if в этой функции, но это не работает должным образом.Может кто-нибудь сказать мне, где поставить код ускорения, и почему там?

Вот как я думал, что это было сделано, но не работает:

    function walkingX(anEvent: Event): void
    {


      var newx: Number = mc.x - (isLeft ? xspeed : 0) + (isRight ? xspeed : 0);
      var newy: Number = mc.y - (isUp ? yspeed : 0) + (isDown ? yspeed : 0);

      if(!boundsBmpData.hitTest(new Point(bounds.x, bounds.y),
                                255,
                                mcBmpData,
                                new Point(newx, newy),
                                255))
      {
         mc.x = newx;
         mc.y = newy;
      }

if(isDown==true && yspeed<maxspeed){yspeed+=2}
if(isUp==true && yspeed>-maxspeed){yspeed-=2}
if(yspeed>0){yspeed-=accel}
if(yspeed<0){yspeed+=accel}

if(isRight==true && xspeed<maxspeed){xspeed+=2}
if(isLeft==true && xspeed>-maxspeed){xspeed-=2}
if(xspeed>0){xspeed-=accel}
if(xspeed<0){xspeed+=accel}

    }

1 Ответ

1 голос
/ 18 декабря 2011

Я думаю, вам нужно удалить эти строки:

if(yspeed>0){yspeed-=accel}
if(yspeed<0){yspeed+=accel}
...
...
...
if(xspeed>0){xspeed-=accel}
if(xspeed<0){xspeed+=accel}

Причина, по которой он вычитается из логики над ним

Относительно ускорение , вы, вероятно, неЯ не хочу увеличивать ваше значение скорости на константу «2».Я бы поместил это в переменную или статический объект, объявленный выше (так что вы можете изменить его только в одном месте, а не везде, где он используется.

В заключение, чтобы получить этот эффект «ускорения», вы должны увеличить скорость умножениемна долю.

Примерно так:

if(isDown==true && yspeed<maxspeed){yspeed *= 1.05}

Или со статической постоянной

public static const MOVEMENT_SPEED:int = 1.05;
...
...
...
if(isDown==true && yspeed<maxspeed){yspeed *= MOVEMENT_SPEED}
...