Javascript 阵列目标的碰撞检测

Javascript 阵列目标的碰撞检测,javascript,arrays,class,collision-detection,p5.js,Javascript,Arrays,Class,Collision Detection,P5.js,我正在用p5.js制作一个小游戏,当化身击中一个特定对象时,该对象需要触发一个特定场景。问题中的对象是数组中包含的4个沙漏,如何“访问”数组以对每个对象实现不同的碰撞检测?我希望我已经够清楚了 class HourGlass { constructor(x, y) { this.x = x; this.y = y; this.w = 60 this.h = 65 } body() { imageMode(CENTER); for (le

我正在用p5.js制作一个小游戏,当化身击中一个特定对象时,该对象需要触发一个特定场景。问题中的对象是数组中包含的4个沙漏,如何“访问”数组以对每个对象实现不同的碰撞检测?我希望我已经够清楚了

class HourGlass {
  constructor(x, y) {
    this.x = x;
    this.y = y;
    this.w = 60
    this.h = 65
  }
  body() {
    imageMode(CENTER);
    for (let i = 0; i < timekNum; i++) {
    image(hourglass, this.x+(i*150) , this.y+(sin(frameCount/(i+10))*(i+20)), this.w, this.h)
  }
  }
  
  checkCollision1(){
    if (me2.x + me2.w > this[0].x && me2.x < this[0].x + me2.w && me2.y + me2.h/2 > this[0].y && me2.y < this[0].y + this[0].h){
      scene = 5
    } 
  }
类沙漏{
构造函数(x,y){
这个.x=x;
这个。y=y;
这个。w=60
这个。h=65
}
正文(){
图像模式(中心);
for(设i=0;ithis[0].x&&me2.xthis[0].y&&me2.y
这是“完整”游戏的链接(它应该在Chrome中运行,因为某些原因,它在Safari中运行起来就像垃圾一样)


提前感谢您的帮助!

问题出在函数checkCollision1()中,请仅为此替换此[0]

 checkCollision1(){
    if (me2.x + me2.w > this.x && me2.x < this.x + me2.w && me2.y + me2.h/2 > this.y && me2.y < this.y + this.h){
      scene = 5
    } 
  }

谢谢!但是当我在我的草图中替换你的代码时,沙漏并没有出现。我是否正确地使用了
函数hourGlassroom(){push()背景(25,25,50)代替(var I=0;I
很抱歉,我不知道怎么做pretty@M0bi0usOne以下是我所做的更改:
  checkCollision(sceneWanted){
    if (me2.x + me2.w > this.x && me2.x < this.x + me2.w && me2.y + me2.h/2 > this.y && me2.y < this.y + this.h){
      scene = sceneWanted;
    } 
  }
function hourGlassroom() {
  push()
  background(25, 25, 50)
  for (var i = 0; i < stars.length; i++) {
    stars[i].body();
  }
    for (let i = 0; i < timekNum; i++) {
  timekeeper[i].body()
    }
  me2.body()
  me2.move2()
  timekeeper[0].checkCollision(5)
  timekeeper[1].checkCollision(6)
  timekeeper[2].checkCollision(7)
  timekeeper[3].checkCollision(8)
  pop()
}
function setup() {
  createCanvas(640, 360);
  noStroke();
  frameRate(fps);
  y = 359;
  vid.loop();
  vid.hide();

  for (let i = 0; i < cloudNum; i++) {
    clouds[i] = new Cloud(random(width), random(height - 180));
  }

  me = new Emi(10, 220);
  
  me2 = new Emi(20, 300);
  for (let i = 0; i < timekNum; i++) {
    timekeeper[i] = new HourGlass(100, height / 2);
  }
  //All timekeeper with the same X and Y params HERE !!.

  for (var i = 0; i < 1000; i++) {
    stars[i] = new Star();
  }
}

 body(i) {
    imageMode(CENTER);
    this.x = 100+(i*150);
    this.rad += 0.05;
    if(this.rad > 2*PI) this.rad = 0;
    this.y = (height/2 + sin(this.rad)*20);
    image(hourglass, this.x , this.y, this.w, this.h);
  }