私のためのストラテジーゲーム/メモ/当たり判定
いくつか方法がありそうなので検討
Pointとの接触判定
XとPointの当たり判定になるので、各オブジェクトに一定の間隔でPointを置かないといけない
流石に厳しくない???
サイズがあるわけじゃないので座標系に含まれるかを見れたら良い
PIXI側のメソッドで判定できるので軽いかもしれない?(あまり確証はない)
なので例えば自機と一部要素の部分をパフォーマンスのために採用するとかはあるかも
自前で概念上の当たり判定システムを描画レイヤと別に構築
オブジェクトとオブジェクトで衝突判定できるようにしたい
が、双方向で処理するとちょっと厳しそう
監視者が各オブジェクトのOnCollisionを呼ぶほうがいいかもしれない
このシステムの構築コストデカそう
すべて四角で実装すると衝突判定そのものは容易
描画のContainerのchildrenにDisplayObjectがあるので使えそう
めちゃくちゃ雑な実装
Collision detectionサービス と Component managerサービスを生やす
Component managerはcomponentクラスを継承しているものを処理できる
Collision detectionサービスはComponent managerサービスに依存し、componentリストをtickごとに走査して当たり判定をチェック、もし衝突していたらcomponentクラスの OnCollision をペイロード(あたった相手のデータとか)つけて叩く
Component managerサービスはaddChildとかcontainerのIFを模倣して、自身で管理するのと同時にインスタンス内で保持するstageに対してコンポーネントを置く役割を持つ
懸念点
依存関係について
サービスの依存自体は単方向
Collision detectionがComponentのOnCollisionを叩くが、
collision detection -> component manager
component manager -> component
collision detection -> component -> onCollision
単方向にするためだと第三者がcollision detectionを使えば良い
collision checkerがcollision detection と component managerに依存する形
毎Tick、component managerからlistを取ってきて collision detection を叩いて当たり判定を行い、当たっていればcomponentの onCollision を叩く
collision checker -> component manager
collision checker -> collision detection
collision checker -> component -> onCollision
https://gyazo.com/0e2f78d4620419c4ad326ac2890bef6d
Collision detectionの役割がデカい
依存関係は問題ではなさそう(子は親を知らなくて良さそう)
https://gyazo.com/0a1b0ed4bcbf2eeefe9f65d777bc96d6
Collision detectionはやりたいことに集中できそう
こちらで作りたい
Collision detection
内部で形ごとのサービスを作る?
PIXI.SHAPESってやつがあるはある
ステージとブロックとバーが矩形で軸に沿って配置されていればボールが円でもどうにかなりそう?
ブロックの角の衝突判定で適切に反射できるか微妙だけどピクセル的にはコーナーケースなので後回し
曲線に対する当たり判定がまったくわからん
二次曲線として考えると分解能にぶつかるので微積とかあの辺り使うんじゃないかなと思ったりする
まっったくわからん
パフォーマンスを無視すると、その二次曲線の全ピクセルにpointを置いて接触判定させることは可能そう
『このフレームの移動が終わるまでにぶつかる』を判定するものなのかな?
じゃないと壁の中にいて(ぼくぶつかっとるで)って言ってきそう
こまる
『このフレームの移動が終わるまでにぶつかる』として、このフレームの移動のいつまでにぶつかって、残りどれくらいの処理が残っているのかまで考えないといけない
必ずしも移動させれば終わるわけじゃない
移動の責務自体もコンポーネントにある
なので何かしらで情報を渡すといいのかも
component manager、コンポーネントリストと当たり判定のあるコンポーネントリストの両方持っていたほうがパフォーマンスよさそう
反射のメモ
止まっているバーに対する反射は入射角と反射角の関係でよさそう
動いているバーに対する反射は
左側への移動が働いているなら右側に跳ね返ってほしい
移動速度にもよるかも
操作系が決まらないとここは仮で設計するしかなさそう
マウスなら速度依存はよさそうだけど、キーボードだと速度を触感よく作るのが難しそう
マウスとタッチ操作を基準にしていいのでは
それを基準にするとバー自体に対するバフとかが狭まる
上限速度もありで設計に組み込むとか?
フラストレーションにならないか心配