2014-02-07 15 views
0

問題很明顯。角色在舞臺和背景中穩定,地面在移動。但是當角色擊中地面時,它會一次又一次地反彈。這是代碼。我該如何解決它?當我移動角色時,它的工作完美,但當移動的物體被磨光時,彈跳問題就會發生。 現在的問題是: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

你能發生什麼或東西GIF?我無法想象這應該是什麼樣子。 – poke

+0

這裏是.swf:http://www.swfcabin.com/open/1391814250 –

+0

嗯,你能告訴我們什麼'trace(ySpeed)'輸出的摘錄? – poke

回答

1

這裏是正在發生的事情:當你嵌入地形,你都加大了ySpeed - 上漲動力 - 直到一個「滴答」拉的性格的地面。但隨後角色會向上飛揚,因爲你增加了向上的動力。他們仍然有這種向上的動力,直到重力把他們拉回來,所以他們會保持「彈跳」。爲了解決這個問題,請執行下列操作:

,而不是在主迴路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; 
     } } 
+0

它不起作用。當我改變ySpeed = 0時,閃光燈自行終止。 –

+0

你打了一個無限循環,看到我更新的答案。 - ,而不是++。我沒有注意到你的ySpeed落後於座標系。 –

+0

非常感謝!我明白這個事實。它解決了我的問題,但現在地面和英雄向上移動ySpeed -1值。 –

相關問題