首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代理冲突不起作用(javascript)

为什么我的代理冲突不起作用(javascript)
EN

Stack Overflow用户
提问于 2019-04-27 08:16:07
回答 1查看 275关注 0票数 2

我有一个名为cube的代理(cube它只是名字,实际上是一个正方形)。每个立方体都会掉落并停在地面上,我希望它们能检测到其他立方体并堆叠起来。

我对这个检测冲突的方法有问题:https://www.youtube.com/watch?v=GY-c2HO2liA&list=PLRqwX-V7Uu6Zy51Q-x9tMWIv9cueOFTFA

我做了2个for循环,但由于某些原因它不能工作。

下面是主脚本:

代码语言:javascript
复制
var cubes = [];
var nb = 10;       //number of cubes
var gravity = .1;
var sz = 10;       //cube size

function setup() {
  createCanvas(400, 400);
  for (i = 0; i < nb; i++) {
    cubes.push(new Cube());
  }
}

function draw() {
  background(51);
  for (var i = 0; i < cubes.length; i++) {
    cubes[i].show();
    for (var j = 0; j < cubes.length; j++) {

      if (i != j && !cubes[i].collide(cubes[j]) && !(cubes[i].pos.y + sz > height)) {
        cubes[i].pos.y += gravity; 

      }
    }

  }
}

这是与HTML文件中的p5.js链接的立方体函数:

代码语言:javascript
复制
function Cube() {

  this.rx = (round((random(0, width - sz)) / sz) * sz);
  this.ry = (round((random(sz, height - sz)) / sz) * sz);

  this.pos = createVector(this.rx, this.ry);


  this.show = function() {
    fill(220);
    noStroke();
    rect(this.pos.x, this.pos.y, sz, sz);
  }

  this.collide = function(other) {

    if (this.pos.y + sz == other.pos.y && this.pos.x == other.pos.x) {
      return true;      
    } else {
      return false;

    }

  }

}

我希望立方体在落地时堆叠在一起,但它们只穿过彼此,完全忽略了我设置的碰撞。

EN

回答 1

Stack Overflow用户

发布于 2019-04-27 08:40:37

我认为您的问题来自于您使用==的事实,请尝试修改此行:

代码语言:javascript
复制
 if (this.pos.y + sz == other.pos.y && this.pos.x == other.pos.x) {

转到

代码语言:javascript
复制
  if (this.pos.y + sz > other.pos.y  &&  this.pos.y  <= other.pos.y+sz  &&
  this.pos.x < other.pos.x+sz && this.pos.x + sz > other.pos.x)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55876208

复制
相关文章

相似问题

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