我遵循了“TheCodingTrain”教程的说明,它描述了如何计算两个圆之间的距离来模拟碰撞。我还有更多,但这是与我的问题相关的代码。
playerPos = createVector(width * 0.2, height / 2, 60);
enemyPos1 = createVector(width * 0.8, height / 2, 40);
d = dist(playerPos.x,playerPos.y,enemyPos1.x,enemyPos1.y);
circle(playerPos.x, playerPos.y, playerPos.z);
circle(enemyPos1.x, enemyPos1.y, enemyPos1.z);
if( d < playerPos.z/2 + enemyPos1.z/2){
enemyPos1.x++
}
我尝试了上面的代码,它没有使小圆圈的位置发生变化。我原以为它会动。我已经检查过了,没有发现代码有任何问题。
您没有任何代码来创建运动。您有两个不重叠的圆圈,并且不移动,因此不会重叠。通常,人们使用添加到位置的速度矢量来创建运动。然后,当圆圈实际重叠时,您的碰撞检测代码将起作用:
let playerPos, enemyPos1;
function setup() {
createCanvas(400, 400);
playerPos = createVector(width * 0.2, height / 2, 60);
enemyPos1 = createVector(width * 0.8, height / 2, 40);
playerSpd = createVector(1, 0, 0);
enemySpd1 = createVector(-1,0,0);
}
function draw() {
background(255);
d = dist(playerPos.x, playerPos.y, enemyPos1.x, enemyPos1.y);
circle(playerPos.x, playerPos.y, playerPos.z);
circle(enemyPos1.x, enemyPos1.y, enemyPos1.z);
if (d < playerPos.z / 2 + enemyPos1.z / 2) {
console.log("hit");
}
playerPos = playerPos.add(playerSpd);
enemyPos1 = enemyPos1.add(enemySpd1);
}