ゲーム作成の本って小難しいし要領を得ないのでゲームの内容を解説します。
書くのが若干面倒になってきましたが、最近でも記事にいいねがつくので約半年ぶりに続きを書きます。
#今回話すこと
- ゲームの処理ついてです
#タスク
ゲームにはタスクというものが存在します。 1
タスクはオブジェクト指向言語のクラスのようなものです。
じゃあ、なぜココでクラスに置き換えて説明しないのか?
それはC言語でもタスクが作れるからです。
タスクは初期化と実行で構成されています。
実行は処理実行と描画実行の2つに分かれます。
初期化関数:
タスクが呼ばれた直後に呼ばれる処理です。 2
実行関数:
初期化後、タスクは毎フレーム実行を行う処理です。 3
タスクは終了処理を書かない限り、延々と実行され続けます。
また、タスクは何個も呼ぶことができます。
わかりやすい処理で言うとシューティングの弾です。
シューティングの弾一つがタスクになっており、
自機の生成処理からタスクを起動すると自機の指定の位置で初期化された弾が
決まった動きで推進します。
敵やオブジェクトに弾があたるか画面外に出るまで弾は推進処理を続けます。
また、同時に出せる弾の数はプログラムで指定しない限り限度はありません。
タスクの処理を関数型で書くとこんな感じ
void init(){
//関数ポインタの配列内を実行
//実行したら配列から消す
}
void exec(){
//関数ポインタの配列を処理
}
void main(){
for(;;){
init();
exec();
}
}
#実際にタスクの実行処理で何をしているか
タスクの実行処理の中は座標位置を決めたり、物によっては衝突判定をしていたりしてます。
本来画面に画像を写すには、ポリンゴンを描画する必要があります。
それを映像として動かすには毎フレーム表示位置をずらすしたり、表示画像の変更する必要があります。
また、単純に表示するだけだと描画の際、映していた画像が残像として残ってしまいます。
そういった理由から、描画クリア処理も毎フレーム走らせています。
描画する順番を決めておかないと、本来手前に表示したいものが後ろに表示されたりしてしまう。
だから、どの順番で処理するかも決めてあげないと、いけません。4
「半透明のオブジェクトがうまく表示されない」などのバグが発生した場合は、描画処理の順番を考慮しないといけません。
描画順などは念頭の置いておくといいと思います。
#もう少し知りたい方はコチラとか読むといいと思います
ゲームエンジンの中の話
https://www.slideshare.net/MasayoshiKamai/ss-55986522
#まとめ
今回はゲームの処理について解説しました。
Unityでは、オブジェクトおくだけで、できちゃう部分ですが
実際にはMonoBehaviourにて上記のような処理が行われているわけです。
抽象クラス様様ですね。
次回はメモリについて話せたらいいなぁ……。