对于迷宫游戏,我正在尝试为角色的运动添加加速度。 因为角色不应穿过墙壁,所以运动功能和命中测试功能相同。
我尝试在此函数中添加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}
}
答案 0 :(得分: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}