2012-11-03 40 views
1

这是一个程序,它可以在任何地方点击鼠标,从而落下球并弹跳。有谁会知道如何改变球落到重力的速度吗? 林试图找出适当的解决方案,这...但我有一点麻烦。所有的帮助和/或投入将不胜感激。改变落球速度......正在处理

float x; 
    float y; 
    float yspeed = 0; 
    float xspeed = 0; 
    float balldiameter = 10; 
    float ballradius = balldiameter/2; 

    void setup() { 
    size (400,400); 
    background (255); 
    fill (0); 
    ellipseMode(CENTER); 
    smooth(); 
    noStroke(); 
    x = width/2; 
    y = height/2; 
    } 

    void draw() { 
    mouseChecks(); 
    boundaryChecks(); 
    ballFunctions(); 
    keyFunctions(); 
    } 

    void mouseChecks() { 
     if (mousePressed == true) { 
     x = mouseX; 
     y = mouseY; 
     yspeed = mouseY - pmouseY; 
     xspeed = mouseX - pmouseX; 
     } 
    } 

    void boundaryChecks() { 
    if (y >= height - ballradius) { 
    y = height - ballradius; 
    yspeed = -yspeed/1.15; 
    } 
    if (y <= ballradius) { 
    y = ballradius; 
    yspeed = -yspeed/1.35; 
    } 
    if (x >= width -ballradius) { 
    x = width -ballradius; 
    xspeed = -xspeed/1.10; 
    } 
    if (x <= ballradius) { 
    x = ballradius; 
    xspeed = -xspeed/1.10; 
    } 
    } 

void ballFunctions() { 
    if (balldiameter < 2) { 
    balldiameter = 2; 
    } 
    if (balldiameter > 400) { 
    balldiameter = 400; 
    } 
    ballradius = balldiameter/2; 
    background(255); //should this be in here? 
    ellipse (x,y,balldiameter,balldiameter); 
    yspeed = yspeed += 0.2; 
    xspeed = xspeed/1.005; 
    y = y + yspeed; 
    x = x + xspeed; 
    } 
void keyFunctions() { 
    if (keyPressed) { 
    if(keyCode == UP) { 
    balldiameter +=1; 
    } 
    if (keyCode == DOWN) { 
    balldiameter -=1; 
    } 
    } 
} 
+1

你有什么尝试?如果你可以从上一帧获得时间间隔,那么这很容易,如果你可以这样做的话,在draw()过程中,将yspeed乘以9.8 *时间(以秒为单位)。 – 2012-11-03 02:59:37

+0

你在使用什么库?你可以调用像'size'和'background'这样的东西,但是这些函数没有在你的代码中定义。 – durron597

回答

5

地球重力加速度为9.81m/s^2。所以,如果在点击鼠标的时候你的球的速度是0,那么最终的速度就是与时间相关的加速度。这将是(9.81 * t)/ 2。其中t是以秒为单位。由此产生的单位将是米/秒。您将不得不将仪表转换为某个屏幕空间单元进行绘图。