SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|

2025-06-18(Wed) あのラップタイム表示を再現したい

  とりあえず、ラップタイムの計測はできるようになったが、表示がイマイチ。最終的に目指すのはコレ。

  画像の説明

  つまり、F1中継とコンパチな表示。いつも手に汗を握って見ている表示だ。その「いつもの」を見ながら走らせたいのだ。自分も。

  元となる時間情報は、1/60秒を元にした、1/1000秒の時計。それを文字列情報に変換したいのだが……

   0.012
   0.123
   1.234
  12.345
1:02.345
1:23.456

  ……という具合にしたい。んが、これ、読みやすい反面、変換ルールはややこしい。さらに、小数点3桁だけではなく、1桁の表示も必要。しかも、半端なく繰り返すので、軽く処理したい。

  つうわけで、練りに練って書いたのが以下。

strdtime: (tsc1000, nfrac = 3) ->
    strmin = '  '; zpad = ' 000'
    (min = Math.floor(tsc1000 / 60000)) and (strmin = min + ':'; zpad = '0000')
    strmsec = String(tsc1000 % 60000)
    strmsec = zpad.slice(0, 5 - strmsec.length) + strmsec
    strmin + strmsec.slice(0, 2) + '.' + strmsec.slice(2, 2 + nfrac)

  割と満足できるコードが書けた。よっしゃよっしゃ。とりあえず、本体に組み入れてみる。うむ。読みやすくなったな。

  画像の説明

  例によって、今回もAIにコードを説明させたり、コードを書かせたりしてみた。説明はほぼ正しかったが、コードはif文が多く、洗練されているとは言えなかった。ふふーん。padStartって関数の存在を知れたのはよかったが……って、いつしかちゃんとコードが動くことに驚かなくなっている自分がいるのに驚くわ。

  ちなみに、ちょっと前から左下に出している黒い箱は、F1中継の「いつもの」表示を意識したもの。まぁ、箱は作ってみたものの、ちょっと解像度的に無理がありそうな予感だが。

  ここんとこ、テンポラリにコードを足しまくっているので、しばらくリファクタリングを進めたい。オーストリアグランプリまで、少し間があるしな。