2014-02-07 2 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. flash завершает сам. –

+0

Вы попадаете в бесконечный цикл, см. Мой обновленный ответ. -, а не ++. Я не заметил, что ваш ySpeed ​​вернулся в систему координат. –

+0

большое спасибо! Я понимаю факт. он исправил мою проблему, но теперь земля и герой движутся вверх с помощью значения ySpeed ​​-1. –

Смежные вопросы