首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基本画布冲突不适用于循环

基本画布冲突不适用于循环
EN

Stack Overflow用户
提问于 2016-01-29 07:51:43
回答 1查看 27关注 0票数 0

我遇到了一个我不太清楚的碰撞问题。我的程序的重点是生成一个随机数的圆圈(在2到15之间),在一个包围框中,这个圆圈的速度是1920x900。如果它们互相碰触,它们就应该朝相反的方向飞去(我知道,这不是很好的物理,但以后就会发生)。

要做到这一点,我有四个数组:两个是圆的坐标(xcords[]和ycords[] ),两个是每个圆的动量(xdirs[]和ydirs[])。

这是我的碰撞函数

代码语言:javascript
运行
AI代码解释
复制
function collides(x, y)
    {
        if(Math.hypot(xcords[y]-xcords[x], ycords[y]-ycords[x]) < 50)
        {
            return true;
        }
        else return false;
    }

当我硬编码某些值时,例如

代码语言:javascript
运行
AI代码解释
复制
if(collides(xcords[1],xcords[0])
{
     xdirs[0] *= -1;
     xdirs[1] *= -1;
     ydirs[0] *= -1;
     ydirs[1] *= -1;
}

那它就能正常工作。我硬编码的两个圆圈会正确地碰撞。但当我试着把它应用到每一个圆圈时:

代码语言:javascript
运行
AI代码解释
复制
for(i=0; i<circles; i++)
        {
            for(j=0; j<circles; j++)
            {
                if(collides(xcords[i], xcords[j]))
                {
                    xdirs[i] *= -1;
                    xdirs[j] *= -1;
                    ydirs[i] *= -1;
                    ydirs[j] *= -1;
                }   
            }
        }

然后圆圈们就会忽略对方,我不知道为什么。这是我唯一一次在这段代码中使用double for循环,但是我多次执行第一个for循环,并且它对每个其他函数都正确地处理它。

这是一把小提琴。https://jsfiddle.net/sekbr0pg/的包围盒有点偏离,但它足以看到碰撞是摇摇欲坠的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-29 08:31:33

让我们以圆圈1和圆2为例,你想要检查它们是否碰撞过一次。下面的循环对此有好处吗?

代码语言:javascript
运行
AI代码解释
复制
for(i=0; i<circles; i++) {
        for(j=0; j<circles; j++){
        // if collides ...
        }
}

答案是否定的,原因是对于i=1 and j=2i=2 and j=1,它们将运行两次。因此,基本上它不会改变自- 1 *-1 =1以来的任何事情。在循环中,将j=0更改为j=i+1

另外,您的collides函数接受圆圈,因此我认为collides(i,j)将完成这项工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35088575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档