【发布时间】:2019-09-05 23:20:02
【问题描述】:
所以,我正在尝试在 Processing JS 中进行基本的物理模拟。我希望用户能够通过拖动来控制球。他们应该能够移动它并通过释放它将其抛向空中。没有其他任何东西,只有这些东西,当然还有画布周围的墙壁,我可以轻松地自己编程。我在动量和重力方面遇到了一些问题,我找不到一个很好的方法来处理我正在使用的当前系统。
我已经尝试过使用 pmouseX 和 mouseX 以及 Y 轴的对应项。但是,如果用户按下屏幕并四处移动,它会重置球的加速度和速度。我在mouseDragged() 函数中完成了所有这些工作。接下来,我尝试在拖动完成时使用mouseReleased 函数执行这些操作,但这不起作用,因为它检测到所有点击并重置加速度和速度,或者将它们设置为高得离谱的数字。对于这两种情况,我也遇到了阻力、空气阻力和摩擦的问题。我不能轻易地将它们与现有的代码和重力结合起来。到目前为止,我一直在使用 PVector 来表示速度。
我已经完成了这两种方法的某种组合,这就是我目前所拥有的。
int x = 150;
int y = 150;
PVector v;
v = new PVector(0,0);
int pmousex2 = 0;
int pmousey2 = 0;
void draw() { // this is run repeatedly.
background(255,255,255);
x += v.x;
y += v.y;
v.set((v.x/1.0125), ((v.y/1.0125)+3));
ellipse(x,y,12,12);
pmousex2 = pmouseX;
pmousey2 = pmouseY;
if (y>294){
v.set((v.x/1.5),(((-1*v.y)/1.5)));
}
if (y<6){
v.set((v.x/1.5),(((-1*v.y)/1.5)+3));
}
if (x>294){
v.set(((-1*v.x)/1.5),v.y);
}
if (x<6){
v.set(((-1*v.x)/1.5),v.y);
}
}
void mouseReleased(){
if (mouseX>(x-20) && mouseX<(x+20) && mouseY>(y-20) && mouseY<(y+20)){
v.set((pmouseX - pmousex2)/4, (pmouseY - pmousey2)/4);
}
}
void mouseDragged(){
if (mouseX>(x-20) && mouseX<(x+20) && mouseY>(y-20) && mouseY<(y+20)){
x=mouseX;
y=mouseY;
}
}
我遇到了几个问题,尤其是上面描述的那些。我也遇到过球在拖动时移动很小的情况。最后,主要问题。当重力将球向下拉时,我无法让球静止不动。如果我加强重力,球最终会从地板上掉下来。如果我削弱重力,球就永远不会停止弹跳。我想知道是否有一种不同的方法来解决我还没有想到的这个问题。非常感谢。
【问题讨论】:
-
我实际上已经想通了。感谢大家的帮助
-
请注意,Processing.js 已于 2018 年 12 月停用 - 如果您正在为 Web 编写新项目,请改用 p5.js。
-
我确实做了那个过渡。感谢您指出了这一点。我最终用加速度和速度向量完全重写了整个东西。
标签: physics p5.js processing.js