ゲーム制作に使えるc言語#2
ゲーム制作でのオブジェクト指向
オブジェクト指向プログラミングとは
クラスを物として考える概念的なもの
オブジェクト指向の利点
・書き換えが簡単
・可読性が上がる
・main関数が見やすくなる
・UnrealEngineがある程度理解できる
オブジェクト指向の欠点
・オブジェクトによっては変数が多くなる
・クラスの理解が必要
・ポインタを使用することが多いのでポインタを理解しないといけない
・いらない変数を作らないように気を付けなければならない
例
「動物」というクラスがあるとします。
動物は鳴くので、鳴くという関数が必要となります。
※ポリモーフィズムの話のために仮想関数にしてあります。
このように必要なものだけをクラス内に定義することをオブジェクト指向プログラミングと言います。
オブジェクト指向の応用(ポリモーフィズム)
上記のクラスを基底クラスにして、「犬」クラスや「猫」クラスを作ります。
その「犬」クラスと「猫」クラスはCry関数をoverrideしてつくります。
Dog.h
※c言語ではoverrideと書かなくても大丈夫ですが、自分がわかりやすいようにoverrideを書くことをおすすめします。
Dog.cpp
Cry関数
ワンと出力するように書いています。
Cat.h
Cat.cpp
Cry関数
Main.cpp
※下でdeleteしています。
animalsのCry関数を全て呼び出すと...
このように出力されます。
これを利用して、敵を複数体作りたい場合やプレイヤーのキャラクターを複数体作りたい場合に、敵の基底クラスを作ったり、プレイヤーの基底クラスを作ったりすると、main関数が見やすくなります。
敵の基底クラスとプレイヤーの基底クラスを同じ基底クラスにすることでもっとmain関数が見やすくなります。
このようにポリモーフィズムは便利ですが、newしたものをdeleteをしなければメモリリークをしてしまいます。
じゃあnewしなければいいじゃないかという人もいると思います。
しかし、newしない場合AnimalクラスのCryが呼ばれてしまうので、ワンとニャーの部分が鳴くとなってしまします。
便利なところもありますが、色々と気を付けて使わなければなりません。
まとめ
オブジェクト指向はあくまでも概念なのでこれが正解ということはありません。
ゲーム制作においては、思った通りに動いたらそれが正解なので、色々と試して自分なりの実装方法を見つけましょう。