问题很清楚。角色在舞台上稳定,背景和地面都在移动。但是当角色撞到地面时,它会一次又一次地反弹。这是代码。我怎么解决呢?当我移动角色时它的工作完美,但当移动物体被地面反弹时,就会出现弹跳问题。 问题在于:http://www.swfcabin.com/open/1391814250
public function controller():void
{
if (rightKey || leftKey || jumpKey)
{
if (rightKey)
{
if (jumpWalk || canJump)
{
hero.gotoAndStop(2);
hero.scaleX = 1;
xSpeed -= speed;
}
}
if (leftKey)
{
if (jumpWalk || canJump)
{
hero.gotoAndStop(2);
hero.scaleX = -1;
xSpeed += speed;
}
}
if (jumpKey && canJump)
{
ySpeed += 15;
canJump = false;
}
}
else
{
hero.gotoAndStop(1);
}
if(!canJump){
hero.gotoAndStop(3);
}
ySpeed -= gravity;
if(ySpeed >10){
ySpeed = 10;
}
else if(ySpeed < -10){
ySpeed = -10;
}
if(xSpeed>10){
xSpeed = 10
}
else if(xSpeed < -10){
xSpeed = -10;
}
xSpeed *= 0.8;
level.x += xSpeed;
level.y += ySpeed;
}// controller function
public function loop(event:Event):void
{
controller();
while(level.hitTestPoint(hero.x , hero.y + hero.height/2 -1 - ySpeed , true)){
trace(ySpeed +"dasd");
ySpeed ++;
canJump = true;
} }
答案 0 :(得分:1)
现在正在发生的事情:当你陷入地形时,你正在增加ySpeed - 向上的动量 - 直到一个'tick'将角色拉出地面。但随后人物向上飞,因为你增加了他们的上升势头。他们仍然具有上升势头,直到重力将他们拉回来,所以他们将继续“弹跳”。要解决此问题,请执行以下操作:
而不是主循环中的ySpeed ++;
,尝试level.y++;
这意味着当他被嵌入时(或实际上拉下地形,因为你的角色是静止的),将英雄从地形中拉出来,而不是改变他的势头让他出局。
您还应该在其中添加ySpeed = 0;
。当你到达地面时,这将代表你失去所有的y动力。
所以你的主循环看起来像这样:
public function loop(event:Event):void
{
controller();
while(level.hitTestPoint(hero.x , hero.y + hero.height/2 -1 - ySpeed , true)){
trace(ySpeed +"dasd");
level.y++;
ySpeed = 0;
canJump = true;
} }