Ich habe buchstäblich drei Wochen lang versucht, das Problem zu beheben. Ich habe KI ausprobiert, ich habe Dokumentation und YT-Tutorials ausprobiert (woher ich den Code habe, den ich jetzt habe), aber nichts scheint auch für Ecken zu funktionieren.
Hier ist mein aktueller Code :
Code: Select all
for (let i = 0; i < entityHitboxLength; i += 8) {
let entityX = entityHitboxes[i];
let entityY = entityHitboxes[i + 1];
let entityXW = entityHitboxes[i + 2];
let entityYH = entityHitboxes[i + 3];
let prevEntityX = entityHitboxes[i + 4];
let prevEntityY = entityHitboxes[i + 5];
let prevEntityXW = entityHitboxes[i + 6];
let prevEntityYH = entityHitboxes[i + 7];
if (
selfYH > entityY &&
selfY < entityYH &&
selfX < entityXW &&
selfXW > entityX
) {
if (selfYH >= entityY && prevSelfYH < prevEntityY) {
selfYH = entityY - 1;
selfY = entityY - 1 - height;
} else if (selfY prevEntityYH) {
selfY = entityYH + 1;
selfYH = entityYH + 1 + height;
}
else if (selfXW >= entityX && prevSelfXW < prevEntityX) {
selfXW = entityX - 1;
selfX = entityX - 1 - width;
} else if (selfX prevEntityXW) {
selfX = entityXW + 1;
selfXW = entityXW + 1 + width;
}
}
}
Ziemlich einfach und funktioniert gut für Kanten.
Ich habe auch eine KI ausprobiert generierter Ansatz wie
Code: Select all
if (
selfYH > entityY &&
selfY < entityYH &&
selfX < entityXW &&
selfXW > entityX
) {
// Calculate overlaps on both axes
const overlapY = Math.min(selfYH - entityY, entityYH - selfY);
const overlapX = Math.min(selfXW - entityX, entityXW - selfX);
// Resolve the smaller overlap first
if (overlapX < overlapY) {
// Resolve X-axis collision
if (selfXW >= entityX && prevSelfXW < prevEntityX) {
selfXW = entityX - 1;
selfX = entityX - 1 - width;
} else if (selfX prevEntityXW) {
selfX = entityXW + 1;
selfXW = entityXW + 1 + width;
}
} else {
// Resolve Y-axis collision
if (selfYH >= entityY && prevSelfYH < prevEntityY) {
selfYH = entityY - 1;
selfY = entityY - 1 - height;
} else if (selfY prevEntityYH) {
selfY = entityYH + 1;
selfYH = entityYH + 1 + height;
}
}
}