文書の過去の版を表示しています。


*Game Programming Patterns

https://gameprogrammingpatterns.com/contents.html

ゲームプログラミングでよく使われるデザインパターンを解説しているサイト。

Command

Flyweight

Observer

Prototype

Subclass Sandbox

  • 浅く広い階層にして継承する?
  • ほとんどのふるまいはsubclassに入る
  • オーバーライドしないと使えないことを明確にする

SuperPower

  それぞれの具体クラスで使うメソッド()
  サウンド()
  パーティクル()
  移動()
  座標取得()
  
SuperPower < SkyLaunch    
SkyLaunch
  superpowerのメソッドを用いる()

多くなって来た場合、さらに分割する。サウンド関係で分けるとか…。

SuperPower
  SoundPlayer()
  ...
SoundPlayer  
  sound()
  stop()
  setvolume()
  ...

みたいな。ベースクラスは、とにかくシンプルに保つ。

Component

再利用可能な部品に分割する。

Component: PhysicsComponent, GraphicsComponent

  • decorationはGraphicsComponentだけを持つGameObject。
  • zoneはPhysicsComponent, GraphicsComponentを持つGameObject(当たり判定があるので)。

このようにして分割。

GameObjectを継承して、各Componentのインスタンスを生成することで再利用が可能。

GameObjectはComponentを集めるだけで、実際にはほとんど何もしない。

Event Queue

その都度すべて実行していては遅くなるのでキューに入れて実行する方式にする。 音やダメージなど、イベントをキューに入れて、処理していく。たとえば音が同時にたくさんなった場合(敵を2体同時に倒したときの断末魔)、ある数に達するとキューに追加しないなど。これによって遅くなるのを防ぎ、ゲーム体験もよくする。

キューを作るには?環状キューが便利。headとtailを用意しておいて、実行が終わったらheadを前にすすめて前の中身を削除。maxの長さに達したらheadに戻るようにする。

動的割当もなく、シンプルでキャッシュの使いやすい方法である。

book/dev_game_pattern.1591688449.txt.gz · 最終更新: 2020/06/09 16:40 by kijima