top page



プロフィール

Yo./Namikaze Project

Namikaze Projectの萌え系プログラマ。ご意見などありましたら、記事にコメントあるいは、twitter(@yo_namikaze)、メール(yo@namikaze.org)にお願い致します。


開発環境など

C++, Blender, Unity, DirectX, Windows7

カレンダー

<   2015年1月   >
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

旧ブログへのリンク

Yo.'s Game Development Diary

購読(RSS)

Powered by Movable Type 5.2.9

[Idinaloq] 進捗 2015/01/21

| コメント(0) | トラックバック(0)

自機の弾の実装など。

本題の前提となる話を。

今回も画像にて。加算ブレンディングをわかりやすくするために3面で。まだ今風の派手さは無いです。

ずっと後になると思いますが、旧版で実装できていなかった、自機や敵機のバーニア噴射をつけたりもする予定です。

20150121_1.png

誰もが最初に選ぶであろうセイレーンは、緑色の3方向弾が主兵装です。この弾は、発射後も、自機のX軸にあわせて弾が追従します。X軸追従タイプになっているので、重要な実装です。このような弾にする理由はですが、単に見た目の問題が1つと、横移動で自機が簡単に弾幕を作ることが出来てしまうのは問題なので、このような処置をしています。

一方、ウンディーネ(オレンジ色の機体)は火力最大の代わりに足を遅く設定していました。バランスをとるため、弾はX軸に追従しないようにしていたと思います。

さて、ここからが本題なのですが、この、「弾を自機のX軸に追従させる」をどのように実装するのか、というのが前回の悩みどころのポイントでした。オブジェクトの独立性を高めるにはどうすべきか、もう少し具体的に自分なりに考え方を書きます。

CGamePlayerBulletオブジェクトに対して、Notificationを行う、オブザーバークラス(言い方はさまざま。Notification CenterでもManagerクラスでも良いですが)を作成します。

CGamePlayerオブジェクトの変化をゲームオブザーバークラスにプレイヤー位置変更メッセージ(例えばkmsgNotificationPlayerPosChange)を通知(Notify)します。

オブザーバークラスは、管理下のオブジェクトに対し、Notififyメソッドを発行し、各オブジェクトは自オブジェクトが処理すべき通知に対する処理があればそれを行い、無ければ何も行いません。今回で言うと、通知を受け取ったCGamePlayerBulletクラスは、通知に従い、メッセージの詳細を見て、追従処理を行います。このメッセージの詳細は、CGamePlayerオブジェクトから通知された座標クラスオブジェクトです。

ゲームを管理するゲームオブザーバークラス(CGameObjectObserver)はゲームオブジェクト(基底クラス:CGameObject)全体のメッセージングを管理しているため、通知内容を判断し、Notify先のオブジェクトを変えても良いです。

このようにすれば、各オブジェクトはメッセージによって結合されているため、結合度が疎になります。

今の実装は、自機弾クラス(CGamePlayerBullet)に、参照オブジェクトのポインタを持たせて、勝手に座標を聞きまくりですw。旧版がこの方式で、そのほうが実装が直ぐに出来たので、今はそうなっていますが、この記事を書いていて、メッセージングを復活させようかと思いましたw

書き捨ててしまったので、svnのリポジトリに残っていません。こまめにお試しコードを入れては消しているので、gitとかにしたほうが良いんでしょうか。

今回はこの辺で。

ではでは。



トラックバック(0)

トラックバックURL: http://www.namikaze.org/mt/mt-tb.cgi/15

コメントする

Yo Namikaze Channel

アフィリエイト

Twitter