ページ 11

c++でのシーンチェンジ

Posted: 2014年11月01日(土) 17:57
by 暇大生
新ゲームプログラミングの館のsp6章を見ながらシーンチェンジ部分を作っています。

そこで、いくつかわからないことがあるので教えてください。

1.SceneMgr.cpp内のコンストラクタでmScene = (BaseScene*) new Menu(this);とありますが、
 mSceneをBaseScene型のMenuでnewしているということでいいですよね?そのようなことは可能なのでしょうか?
 検索したらアップキャストと呼ばれるものがヒットしましたが、それとはちょっと違うような気がします。それであっているのでしょうか?

2.1と同じ行でMenu(this)とありますが、thisとはこの場合SceneMgrのポインタですよね?
 Menuのコンストラクタの引数にはISceneChanger* changerとあるので、SceneMgrのポインタを引数にする意味が分かりません。

3.BaseSceneクラスのprotectedにISceneChanger* mSceneChanger;とありますが、ISceneChangerには
 純粋仮想関数があるためそのまま使うことはできないはずではないでしょうか?

よろしくお願いします。

Re: c++でのシーンチェンジ

Posted: 2014年11月01日(土) 18:12
by h2so5
暇大生 さんが書きました: 1.SceneMgr.cpp内のコンストラクタでmScene = (BaseScene*) new Menu(this);とありますが、
 mSceneをBaseScene型のMenuでnewしているということでいいですよね?そのようなことは可能なのでしょうか?
 検索したらアップキャストと呼ばれるものがヒットしましたが、それとはちょっと違うような気がします。それであっているのでしょうか?
アップキャストです。MenuはBaseSceneを継承しているのでアップキャストが可能です。
明示的にキャストする必要はないので(BaseScene*) は本当は不要です。
暇大生 さんが書きました: 2.1と同じ行でMenu(this)とありますが、thisとはこの場合SceneMgrのポインタですよね?
 Menuのコンストラクタの引数にはISceneChanger* changerとあるので、SceneMgrのポインタを引数にする意味が分かりません。
SceneMgrはISceneChangerを継承しているのでISceneChangerにアップキャストされます。
暇大生 さんが書きました: 3.BaseSceneクラスのprotectedにISceneChanger* mSceneChanger;とありますが、ISceneChangerには
 純粋仮想関数があるためそのまま使うことはできないはずではないでしょうか?
ISceneChangerのインスタンスを生成することはできませんが、ポインタとしてSceneMgrを代入しているだけでインスタンスは生成していないので問題はありません。

Re: c++でのシーンチェンジ

Posted: 2014年11月01日(土) 21:25
by 暇大生
h2so5さん
ありがとうございます。すべて理解できました。