0

对于迷宫游戏,我试图为角色的移动增加加速度。因为角色不应该穿过墙壁,所以移动函数和 hittest 在同一个函数中。

我尝试在此函数的 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}

    }
4

1 回答 1

1

我认为您需要删除这些行:

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}
于 2011-12-18T15:02:14.410 回答