@@ -4,6 +4,8 @@ const stage = document.querySelector("#gameStage");
44const speedValue = document . querySelector ( "#speedValue" ) ;
55const driveState = document . querySelector ( "#driveState" ) ;
66const controlCard = document . querySelector ( "#controlCard" ) ;
7+ const TOP_SPEED_KMH = 376 ;
8+ const SPEED_MULTIPLIER = 9.2 ;
79
810const controls = {
911 up : false ,
@@ -272,8 +274,7 @@ function drawTrack() {
272274}
273275
274276function updateCar ( deltaTime ) {
275- const maximumSpeed = car . length * 4.6 ;
276- const acceleration = maximumSpeed * 0.92 ;
277+ const maximumSpeed = car . length * SPEED_MULTIPLIER ;
277278 const cosine = Math . cos ( car . angle ) ;
278279 const sine = Math . sin ( car . angle ) ;
279280 let forwardSpeed = car . velocityX * cosine + car . velocityY * sine ;
@@ -282,6 +283,9 @@ function updateCar(deltaTime) {
282283 const throttle = Number ( controls . up ) - Number ( controls . down ) ;
283284
284285 if ( throttle !== 0 ) {
286+ const speedRatio = clamp ( Math . abs ( forwardSpeed ) / maximumSpeed , 0 , 1 ) ;
287+ // Strong but progressive acceleration: quick launch, then a smooth approach to top speed.
288+ const acceleration = maximumSpeed * 0.48 * ( 1 - speedRatio * 0.72 ) ;
285289 forwardSpeed += throttle * acceleration * deltaTime ;
286290 hasDriven = true ;
287291 }
@@ -336,7 +340,7 @@ function updateCar(deltaTime) {
336340 car . x = clamp ( car . x , - margin , worldWidth + margin ) ;
337341 car . y = clamp ( car . y , - margin , worldHeight + margin ) ;
338342
339- const speed = Math . round ( Math . abs ( forwardSpeed ) / maximumSpeed * 188 ) ;
343+ const speed = Math . round ( Math . abs ( forwardSpeed ) / maximumSpeed * TOP_SPEED_KMH ) ;
340344 speedValue . textContent = String ( speed ) ;
341345 driveState . textContent = ! hasDriven
342346 ? "待发车"
@@ -572,6 +576,9 @@ function publishDiagnostics() {
572576 stage . dataset . vehicle = "f1" ;
573577 stage . dataset . driftEnabled = "false" ;
574578 stage . dataset . visibleFences = "false" ;
579+ stage . dataset . topSpeedKmh = String ( TOP_SPEED_KMH ) ;
580+ stage . dataset . speedMultiplier = String ( SPEED_MULTIPLIER ) ;
581+ stage . dataset . accelerationProfile = "progressive" ;
575582 stage . dataset . cameraZoom = String ( cameraZoom ) ;
576583 stage . dataset . worldTiltX = String ( worldTiltX ) ;
577584 stage . dataset . worldTiltY = String ( worldTiltY ) ;
@@ -658,6 +665,9 @@ window.raceDebug = {
658665 vehicle : "f1" ,
659666 driftEnabled : false ,
660667 airWallHits,
668+ topSpeedKmh : TOP_SPEED_KMH ,
669+ speedMultiplier : SPEED_MULTIPLIER ,
670+ accelerationProfile : "progressive" ,
661671 trackSamples : trackSamples . length ,
662672 } ) ,
663673} ;
0 commit comments