2015-10-20 2 views
-1

Я экспериментировал с проблемой отскока мяча от 1-го шага в KonvaJS с нулевой потерей. Следовательно, должно показаться, что шар просто осциллирует.Почему анимация восходящего движения быстро?

Уравнения для этого доступны here. (Нажмите here для чтения инструкций).

Полный код доступен по адресу github (Для настройки README.md).

Код ниже отвечает за анимационную часть:

stage.on('contentClick', function(e){ 
    var pos = stage.getPointerPosition(); 
    var circle = new Konva.Circle({ 
     x: pos.x, 
     y: pos.y, 
     fill: 'red', 
     radius: 20 
    }); 
    var h = bounds.max.y - pos.y - circle.radius();  
    layer.add(circle).draw(); 
    var last, 
     start, 
     u = 0, 
     distance = function(time) { 
      var ts = time/1000; 
      return u * ts + 0.5 * g * ts * ts; 
     }, 
     lastPos; 

    var anim = new Konva.Animation(function(frame){ 
     if(!start) { start = getTime(); } 
     var now = getTime(); 
     var diff = now - start; 

     if(diff > params.delay) { 

      var y = distance(diff); 
      //debug({state: 'before', u: u, g: g, y: circle.position().y, dist: y});     
      if(u === 0) {     
       var cl = circle.y() + circle.radius(); 
       circle.y(pos.y + y); 
       if(cl >= bounds.max.y) { 
        circle.move({ 
         y: bounds.max.y - cl 
        }); 
        layer.draw();      
        console.log('reverse u > 0'); 
        u = Math.sqrt(2 * g * h); 
        g = -g;            
        start = null; 
        return false; 
       } 
      } 
      else { // when u < 0 
       console.log(diff, y, circle.y()); 
       var cc = circle.y() 
       cc = cc - y; 
       circle.y(cc); 
       if(cc <= pos.y) { 
        circle.y(pos.y); 
        layer.draw();      
        console.log('reverse u = 0'); 
        u = 0; 
        g = -g; 
        start = null; 
        return false; 
       } 
      }    

      return; 
     } 
     return false; 
    }, layer); 
    start = getTime(); 
    anim.start(); 
}); 

Для меня это имеет смысл, что вверх анимация собирается быть быстрым; уравнения говорят так. Но анимация в результате этого негладкая. Я ожидаю, что мяч поднимается вверх быстро, замедляется до достижения высоты (вершины), а затем снова падает.

Теоретически говоря, время, затраченное на две поездки, должно быть одинаковым. Однако для этой анимации это не так. Итак, либо мои уравнения должны быть неправильными, либо мне нужно настроить что-то в анимации.

ответ

0

Была ошибка в том, как вычисляется восходящее движение ... теперь я решил это.

+0

Прошу вас принять ваш собственный ответ и закрыть дальнейшие ответы. – divy3993