如何解决无法在javascript中将对象属性的值设置为另一个对象属性
我是 javascript 新手,为了学习它,我尝试进行弹性碰撞模拟。我设法创建了一些圆圈,让它们在墙壁上移动和弹跳。但是,碰撞代码不起作用。球经常会相互穿过。我很确定不是碰撞检测有问题。我认为我的碰撞代码不准确,所以我将其简化为(一个不切实际的模型),我认为它可以工作:
for(var i = 0; i < circles.length; i++){
for(var j = 0; j < circles.length; j++){
if(j != i && collitionDetect(circles[i].x,circles[i].y,RAD,circles[j].x,circles[j].y,RAD)){
const tempX = circles[i].xVel;
const tempY = circles[i].yVel;
circles[i].xVel = circles[j].xVel;
circles[i].yVel = circles[j].yVel;
circles[j].xVel = tempX;
circles[j].yVel = tempY;
}
}
}
此代码位于定期运行的函数 (setInterval()) 内。大多数情况下,它仍然存在球相互穿过的相同问题。我不认为这是碰撞检测问题的原因是因为我尝试将值分配为 0,然后所有圆圈在碰撞时都会正确停止。因此我认为问题与新值的分配有关。
这是数组中的对象所遵循的类的代码:
class Circle{
constructor(x,y,r,xVel,yVel){
this.x = x
this.y = y
this.r = r
this.xVel = xVel
this.yVel = yVel
}
这里是碰撞检测的代码,以防它仍然是错误的:
function collitionDetect(x1,y1,r1,x2,y2,r2){
if(Math.sqrt(Math.pow((x2 - x1),2) + Math.pow((y2 - y1),2)) <= r1 + r2){ return true;}
else{return false}
我想知道为什么会发生这种情况以及如何修复它,或者它是否必须是我的代码中的其他问题。预先感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。