Verbesserung der Fahrzeug-Logik im Taxi-Spiel
Änderungen: - Implementierung einer Wartezeit von 1 Sekunde, bevor ein gestopptes Auto wieder fahren darf, um realistischere Bewegungen zu ermöglichen. - Anpassung der Distanzprüfung für das Wiederanfahren von Autos, um die Interaktion mit dem Taxi zu optimieren. - Entfernung der Rückwärtsbewegung bei Kollisionen mit stehenden Taxis, um das Verhalten zu vereinheitlichen. - Hinzufügen eines Zeitstempels für den Stopp eines Autos zur besseren Nachverfolgbarkeit. Diese Anpassungen verbessern die Fahrzeuginteraktion und die Kollisionserkennung im Spiel.
This commit is contained in:
@@ -1973,19 +1973,23 @@ export default {
|
||||
updateCarMovement(car) {
|
||||
// Wenn das Auto gestoppt ist (nach Kollision mit stehendem Taxi), prüfe ob Taxi weg ist
|
||||
if (car.isStopped) {
|
||||
// Prüfe ob das Taxi noch in der Nähe ist (Kollisionsabstand + 50px Puffer)
|
||||
// Mindestens 1 Sekunde warten, bevor das Auto wieder fahren darf
|
||||
const now = Date.now();
|
||||
const minWaitTime = 1000; // 1 Sekunde
|
||||
|
||||
if (car.stopTime && (now - car.stopTime) < minWaitTime) {
|
||||
return; // Noch nicht lange genug gestoppt
|
||||
}
|
||||
|
||||
// Prüfe ob das Taxi noch in der Nähe ist
|
||||
const distance = Math.sqrt(
|
||||
Math.pow(car.x - this.taxi.x, 2) + Math.pow(car.y - this.taxi.y, 2)
|
||||
);
|
||||
const collisionDistance = 80; // Etwa die Größe der Kollisionsboxen
|
||||
|
||||
console.log(`Auto ${car.id} gestoppt - Distanz zum Taxi: ${distance.toFixed(1)}px`);
|
||||
|
||||
if (distance > 30) {
|
||||
if (distance > 40) {
|
||||
// Taxi ist weg - Auto kann wieder fahren
|
||||
car.isStopped = false;
|
||||
car.speed = car.originalSpeed || 0.5; // Ursprüngliche Geschwindigkeit wiederherstellen
|
||||
console.log(`Auto ${car.id} kann wieder fahren - Taxi ist weg (Distanz: ${distance.toFixed(1)}px)`);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -3011,22 +3015,10 @@ export default {
|
||||
handleCarTaxiCollision(car) {
|
||||
// Wenn das Taxi steht (speed = 0), soll das Auto zurückfahren und stehen bleiben
|
||||
if (Math.abs(this.taxi.speed) < 0.1) {
|
||||
// Auto 10 Pixel zurückfahren in entgegengesetzter Richtung
|
||||
const backDistance = 10;
|
||||
|
||||
if (car.direction === 'up') {
|
||||
car.y += backDistance;
|
||||
} else if (car.direction === 'down') {
|
||||
car.y -= backDistance;
|
||||
} else if (car.direction === 'left') {
|
||||
car.x += backDistance;
|
||||
} else if (car.direction === 'right') {
|
||||
car.x -= backDistance;
|
||||
}
|
||||
|
||||
// Auto zum Stehen bringen
|
||||
// Auto zum Stehen bringen OHNE Zurücksetzen
|
||||
car.speed = 0;
|
||||
car.isStopped = true;
|
||||
car.stopTime = Date.now(); // Zeitpunkt des Stopps merken
|
||||
|
||||
console.log(`Auto ${car.id} ist mit stehendem Taxi kollidiert und steht jetzt`);
|
||||
} else {
|
||||
@@ -3706,13 +3698,6 @@ export default {
|
||||
// Zeichne Autos
|
||||
this.drawCars();
|
||||
|
||||
// Debug: Kollision-Overlays zeichnen (falls vorhanden)
|
||||
if (this._collisionDebug && this._collisionDebug.ttl > 0) {
|
||||
const dbg = this._collisionDebug;
|
||||
this._drawDebugPoly(dbg.aCorners, 'rgba(255,0,0,0.35)', '#ff0000');
|
||||
this._drawDebugPoly(dbg.bCorners, 'rgba(0,128,255,0.35)', '#0080ff');
|
||||
dbg.ttl -= 1;
|
||||
}
|
||||
|
||||
// Zeichne Taxi
|
||||
this.ctx.save();
|
||||
|
||||
Reference in New Issue
Block a user