前回「画面描画が自動で行われないと言うのはおかしい!」という事は分かってたのですが、それをどうやって自動化するのかが全然わかりませんでした。
しかし!Realm of Racketのサンプルゲームを読み解くことでついに判明
どうもOn-tickが怪しいと思っていたが、やはりここを更新することでフレーム単位でのキー入力によらない(つまり自動的な)処理が出来ると判明した!
そして早速実験として「ヒットエフェクトの消去」を実装。成功!
これが分かればOn-keyのところでHEROとENEMYで分けてた処理のうち、ENEMY部分をOn-tickに移してやるだけでオッケイのハズ。多少引数の調整は必要だったけど成功
あんまりにも嬉しかったのでGifで動画を撮影してしまったぜ。ようやくENEMYが自動で動くようになった!
こうなると後は右枠での「ステータス表示」と「ダメージなどのメッセージ表示」でそこそこ見られるモノになるんじゃないか!?
早速やっていこう(^o^)
とりあえずレイアウトを決めないと・・手探りでこんなところじゃないか?という場所を(例によって総当り方式で)探ってみた。これで表示すると・・
こんな感じ。本当は枠線とか欲しいけど、ま、それは後で。
後はこれを可変長引数で動かせるように関数にする、と。
では実際のところどうしたものか・・と思ってplace-imageを見てると、その下にplace-imagesというのが目に入る。ん?これは・・なんか今回の件にちょうど良さそうな気がする
なんかForを使えばうまく行くような気がする・・と調べてるとFor/listsってのを発見、コレだ!高さの数字リストがかっこ悪いけど(確かstreamでこういう数列を作れる関数があったはず・・今度やる)、Forは短い方のリスト要素数を使い切ったところでストップするのでこれで行けるはず!
が、駄目!なんでやねん!リスト2つ必要なはずなのに1個しか期待してないとな?
実験の結果、Valuesの返り値が特殊だということが分かった・・・って言うか、そう言えばCametanさんの例でもLet-values使ってはったわ(-_-;)
これでどないだ!?
マジかよ・・うまく行った!もう夜中1時を過ぎてるけど諦めなくて良かった〜(^o^)
C-LISTをそのまま読み込んで処理してるので行動順にソートされ続けてアクティブなキャラは先頭になり終了するとケツに移動するという、ちょっと落ち着かない事になってるのだけど・・うーん・・これはコレで良いけどね。どうしよう・・
ま、とりあえず次回メッセージ部分を作ってから考えるか!