2013-05-28 2 views
0

Я не мог найти, как спросить, так что есть демонстрация на link. Я уверен, что это простой вопрос, но я не могу найти почему.Отскок мяча перестает подпрыгивать?

Мой вопрос: почему мяч перестает прыгать? Это о чем-то вроде округление в умножений или подразделений и т.д. ...

void move() { 
     PVector v0 = v; 
     PVector dv = PVector.mult(a, deltaT); 
     v.add(dv); 

     PVector d = PVector.add(
      PVector.mult(v0, deltaT), 
      PVector.mult(dv, deltaT * 0.5)); 

     move(d.x, d.y); 
    } 


    void move(float dx, float dy) { 
     p.x += dx; 
     p.y += dy; 

     if (p.x > width - r) { 
      p.x = width - r; 
      v.x = -v.x; 
     } 
     if (p.x < r) { 
      p.x = r; 
      v.x = -v.x; 
     } 
     if (p.y > height - r) { 
      p.y = height - r; 
      v.y = -v.y; 
     } 
     if (p.y < r) { 
      p.y = r; 
      v.y = -v.y; 
     } 
    } 

ответ

2

Это вопрос с этой части кода:

if (p.y > height - r) { 
    p.y = height - r; 
    v.y = -v.y; 
} 

Представьте, что высота 600 и г 10. Когда мяч попадает в нижний (ру> (600 - 10)) он получает Сброс в (600-10). Но мяч может попасть в нижнюю часть ниже: p.y может быть выше, чем высота, что приводит к проблеме, которую вы испытываете. Правильный код в этом случае будет таким:

if (p.y > height - r) { 
    p.y = (p.y - height) + (height - r); 
    v.y = -v.y; 
} 

Будучи (p.y - высота) то, что вы теряете каждый раз, когда мяч отскакивает.

Надеюсь, это поможет.

0

Существует умножение на переменную, которая является < 0 в каждом Move из шарика объекта. Его PVector a; объект шарика, который первоначально получает значение силы тяжести (PVector тяжести = новый PVector (0, 0.0025);) в установке()

ball.a = gravity; 

Затем в каждой Move

PVector dv = PVector.mult(a, deltaT); 

В конечном итоге это приводит к нулю значения PVector dv.

, если вы измените

PVector gravity = new PVector(0, 0.0025); 

в

PVector gravity = new PVector(0, 0.025); 

вы увидите более сильный эффект гравитации.

+0

0.0025 не является '<0', а' PVector.mult (a, deltaT) 'создает одно и то же значение' dv', которое равно '> 0', в каждом шаге. Поэтому я не думаю, что это причина (или я не понял вас правильно :). Даже увеличение гравитации просто делает то же самое быстрее. –

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