如何解决碰撞检测数组对象
我正在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
}
}
这是“完整”游戏https://editor.p5js.org/larie438/sketches/uufycStNE的链接(由于某种原因,它应该在Chrome中运行,由于它在Safari中像垃圾一样运行)
提前感谢您的帮助!
解决方法
问题出在函数checkCollision1()中,仅对此替换this [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
}
}
如果要选择碰撞的场景,我建议使用如下参数:
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()
}
在这之后,您可能会遇到一个问题,那就是唯一可以工作的计时器是第一个,因为您用相同的X和Y参数创建了所有计时器。
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();
}
}
实际上,您可以移动画布中的所有计时器,但是您需要像这样更新其X和Y参数。
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。