【问题标题】:Incrementing a bounce variable by one at a time - C++一次将反弹变量增加一个 - C++
【发布时间】:2013-11-13 14:25:01
【问题描述】:

我正在尝试模拟一个弹跳球,它只是吐出 x 位置、y 位置、时间和弹跳次数的数字。就物理学而言,它工作得很好,但问题是当我尝试增加“反弹”变量时,它每帧增加一,而不是一,然后等待下一次反弹。

这是相关的循环:

while(bounces<=maxBounces){
    frames++;
    seconds=frames/1000;    

    if(yPos>=0&&bounces==0){
        initRads=getRads(initAng);
        dropBall(initVel, initRads);    
    }
    if(yPos<0){
        yPos=0;
        bounces++;
        cout.precision(5);
        cout<<seconds<<"\t"<<yPos<<"\t"<<xPos<<"\t"<<bounces<<"\n";
        newVel=getVel(currYVel, currXVel, cor);
        newAng = getAng(currYVel,newVel);

        dropBall(newVel, newAng);
    }   
}

【问题讨论】:

  • 似乎唯一会发生的情况是 yPos 小于 0。你的 getAng() 工作正常吗?
  • 为什么 getAng() 使用速度?不应该使用之前的角度吗?
  • 您也只在弹跳上打印还是 dropBall() 打印。并且索林提出了一个很好的观点。
  • 对,我意识到因为我的 getAng() 使用的是当前的 Y 速度,而不是 newVel 的 y 分量,所以它会被丢弃。我将如何使用以前的角度?
  • 不用担心。我所做的是切换它,以便它获取新组件,然后找到结果,然后选择新角度,但弹跳问题仍然很明显。我尝试将增量作为 dropBall() 的一部分,但发生了同样的事情(即给 dropBall 一个反弹参数,在第一个实例上为零,在其他实例上为零,然后将其添加到反弹计数中,但它仍然不起作用。所以它以某种方式超过一帧的

标签: c++ increment projectile


【解决方案1】:

您的模拟有点错误。如果yPos&lt;0 执行dropBall,您应该有一个else 分支。

【讨论】:

  • 对不起,你失去了我。你能解释一下吗?抱歉,您可能已经注意到我对此不太感兴趣。
  • @user2988064 从您的代码看来,球只有在开始时或 yPos
  • 哦,知道了。那么我应该让 if yPos
  • @user2988064 你应该有 if ypos
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多