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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
暇大生

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

#1

投稿記事 by 暇大生 » 9年前

新ゲームプログラミングの館の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には
 純粋仮想関数があるためそのまま使うことはできないはずではないでしょうか?

よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 9年前

暇大生 さんが書きました: 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++でのシーンチェンジ

#3

投稿記事 by 暇大生 » 9年前

h2so5さん
ありがとうございます。すべて理解できました。

閉鎖

“C言語何でも質問掲示板” へ戻る