今日の雑記

生きることでいっぱいいっぱい

久々に D でやっちゃったよ。

今まで実は DMD ver0.160 で作ってたんですが。理由はそれ以降のバージョンにすると当方の BulletML が動かなくなるから。という情けない理由。
んでまあ、特にいっかーとか考えてたんですけど、さすがになー、というかまあ現状バージョンは ver0.174 となっているわけでして、あまりにも時代が遅れすぎてるので、対処することにしました。
んでまあ、とりあえずなにがどうなってるか調べてみると...、

  • 弾タスクは発行されてる。
  • んで実行もされている。
  • さらに描画関数にもきてる。
  • そんでもってタスクはいつまでたっても終わらない。

これらの情報を元に考えられることは、

  • タスクは存在するのに見えないということは、見えない場所にあると言うこと。
  • でも、画面外処理で終了にいってないということは、なんか数値が異常?

というわけで、座標を表示してみた。


Bullet(active) nan,nan
おわ。想像通りだ。でもなんで?
そんで、その後色々見てみた結果、

createBullet(active) Acc nan,nan
まあ確かに、Accel 要素は使わん限り初期化もされんからね。
えーっと?でもなんでだっけ?

TskBuf[id].px += TskBuf[id].bullet_velx;
TskBuf[id].py += TskBuf[id].bullet_vely;
TskBuf[id].px += TskBuf[id].bullet_accx;
TskBuf[id].py += TskBuf[id].bullet_accy;
えーっと、つまり?理由はよく解らんけど、つまり、

  • ver0.160 までは、浮動少数型の変数に nan な値の演算しても大丈夫だった(みたい?)。
  • ver0.161 から、nan に関する演算の処理が変わった?
  • つまり、正常な浮動少数変数に nan な値の演算をすると、その変数も nan になる。
  • でも、一部の環境(Linux)では動いてたっぽい。

ということになるな。
まあ確かに、お行儀の良い処理ではないので、素直に TskBuf[id].bullet_acc は 0 で初期化することにしましたが。
なーんかこれ環境に依存しそうな部分だよなあ。今までのゲーム、大丈夫だったのかしら...?