Boids 3.0 – コード説明

概要

Boids 3.xシリーズで敵(Enemy)を導入する準備として、クラス構成の改良などを行った。

Boids 2.xまではBoidだけだった生物の種類に、新たにEnemyという別の種類が加わるが、どちらについても以下の特徴は共通している。

  • 複数個体をClusterオブジェクトにまとめて扱われる
  • Field内を移動する
  • 壁との衝突を避ける

そこで、これらの特徴に関する部分をCreatureクラスから抜き出したものを新たにCreatureとしてテンプレート化し、Boid特有の動作についてはCreatureクラスを継承したBoidCreatureで実装した。

このほか、BoidとEnemy2つの群を扱うことから、Clusterで処理していた画面の消去処理を外に出すなどの変更を行っている。

Creatureクラスのテンプレート化

Boids 2.3

まず、元となったBoids 2.3のコードの構成を確認する。壁の回避、分離、結合、整列に関するメソッドを定義し、これらをmove()メソッドで呼び出している。

Boids 3.0

Boids 3.0では2.3のCreatureクラスをCreatureBoidCreatureに分け、CreatureクラスにはBoidとEnemyに共通する動作を書き、Boidに特有の動作についてはBoidCreatureのメソッドで実装した。

Creatureクラス

Creatureクラスは以下のメソッドを持っている。

wallAvoidance()
壁との衝突を回避するメソッド。
specificBehavior()
このクラスを継承するクラスごとに特有の動作を記述するためのメソッド。抽象クラスのabstractメソッドに相当し、継承したクラスにおいてその内容が実装される。
determinePosition()
上記2つのメソッドで計算された位置と速度から、次の時間ステップにおける位置を決定するメソッド。

BoidCreatureクラス

BoidCreatureクラスはCreatureクラスを継承し、specificBehavior()メソッドを実装する。

BoidCreatureクラスで分離、結合、整列に関するメソッドを定義し、specificBehavior()メソッドでそれらを呼び出している。

描画処理の変更

Boid 3.xでは、BoidとEnemyという2つの生物をそれぞれ別のClusterオブジェクトに登録して扱う。Boids 2.3までは、アニメーションフレーム再描画のための画面消去処理をClusterクラスのdraw()メソッドで行っていたが、このままだとBoid、Enemyそれぞれの描画の際に画像が消去されて、どちらか一方が画面に表示されなくなる。

そこで、画面消去処理をClusterではなくControlergenerate()メソッドとstartAndStop()メソッドに置いた。

 


↑ Boids 2.3のコード説明へ

↓ Boids 3.1のコード説明へ

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です