まだ頑張っている。というか最近の取り組みでいちばん熱心なのがこれだ。次がベースでその次が仕事、次いでスト5。いや仕事はもっと下かもしれない。
ユニットの絵だのなんだのは枝葉末節もいいとこの寄り道だ。この処理があまりにめんどくさそうなので逃げ回っていたのだ。
- カーソルを動かす
- 選択ボタンを押す
- カーソル位置にユニットがいたら「つかみ」状態にする
- 移動が可能な範囲を計算する
- 移動が可能な範囲を点滅表示する
- カーソルを動かし、目的地で決定ボタンを押す
- カーソル位置がユニットを置く条件を満たしているか確認する
- 問題なければユニットを移動させる
- 「つかみ」状態の解除を行う
みたいな一連をやる。つかむのと移動範囲の計算はすでにできていたが、つかんだユニットを移動させるロジックを今回は書いた。
歩ける範囲内で、かつ他のユニットがいないところにだけ移動できるよー的なやつがだいたいできた。
todo
敵ユニットとの隣接タイルにおいてはZOCを効かせたい。これがないと戦線突破が容易になってしまってだいぶチャカポコしてしまう。この計算はまだできてない。
いまのとこ瞬間移動しちゃってるんだがいい感じに一歩ずつ歩くアニメーションにしたい。
そうすると最短経路の計算も一緒にしないとどの順番でマスを踏むのか表現できない。
また、決定ボタンを押したあとのしばらくのフレームを消費して少しずつユニットの移動を表現することになるが、その方法がわからない。
「つかむ」みたいに「移動中フラグ」みたいなもんを持たせておき、真のときに少しずつ動かすようなことをやるといいんだろうか。
カーソルでつかんでる間、ユニットをカーソルにくっつけて表示したらアニメーションしなくていいんじゃない?
とはいえCPUが思考中のときはアニメーションいるから、やっぱ必要は必要か。
ゲーム本編・マップとタイル・ユニット・カーソルのクラスがそれぞれ複雑化してきて、メソッドの在り処が適切だろうかみたいな悩みが増えてきた。設計もしないで思いつき制作をやっているからそうなることは必然だったんだが、ちょっとでもモチベーションを失うと何がどこにあるのかもわからなくなり、再開の時に全部ポイするとかでもしないと身動き取れなくなりそう。
いまのとこそれぞれのオブジェクトが必要な知識をもって振る舞っているんだけど、マップの視点からユニットを見たり、カーソルの視点から見たりとシーンが様々だ。
「つかみ」のときなカーソルがユニットを抱えていたりもする。
1行も書いてないが、テストコードを書こうと思ったらとんでもなく地獄になるとは思う。
x, y 表現と y, x 表現が混ざっている。
ヒヤヒヤする。ゲームの座標系においては y, x のほうが都合がいいと途中でわかったものの、Pyxelのあちこちでは x, y での表現が普通だったりしている。いつか間違えちゃわないか心配。
One thought on “キャラが動いた”