シーンごとのソース管理

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

シーンごとのソース管理

#1

投稿記事 by おむすび » 15年前

何度も同じ質問をしてしまい申し訳ございません。
以前、こちらのサイトでシーンごとのソース管理について
質問させて頂いた者です。
http://www.play21.jp/board/formz.cgi?ac ... &rln=45138

もしgame_scene.cppなどのシーンからSceneChange関数を
呼ぶ場合はどうすればよいのでしょうか?

error C3861: 'SceneChange': 識別子が見つかりませんでした

と出てしまいます。
これはSceneChange()を別のページで書いているからでしょうか?

Justy

Re:シーンごとのソース管理

#2

投稿記事 by Justy » 15年前

>もしgame_scene.cppなどのシーンからSceneChange関数を
>呼ぶ場合はどうすればよいのでしょうか
 SceneChange関数のプロトタイプ宣言を適当なヘッダに書いて、それを game_scene.cppなどのソース上で
インクルードして下さい。

おむすび

Re:シーンごとのソース管理

#3

投稿記事 by おむすび » 15年前

ご回答ありがとう御座います。
すみません。質問の日本語がおかしかったです。

SceneChangeという関数を作って
シーンを変えられるようにしたいです。
現在は GetSceneFunc(int id) の戻り値をシーンで読み込んでる感じです。

キーワード:dx
http://www1.axfc.net/uploader/Ne/so/73699

kazuoni

Re:シーンごとのソース管理

#4

投稿記事 by kazuoni » 15年前

そもそも関数SceneChangeの実体がありませんね。
実体を書かなければ動かす事ができませんよね。
ほかにも数個関数の実体がない関数があります。 画像

おむすび

Re:シーンごとのソース管理

#5

投稿記事 by おむすび » 15年前

ご回答ありがとう御座います。
すみません。ここにあげるためにいくつか関数を省きました。

>>そもそも関数SceneChange関数の実体がありませんね。
これを作りたいのですがどこにどう書けばよいのかが
検討つきません・・・。

今まではmain.cppにてsceneFunc = GetSceneFunc(SENE_GAME);
みたいに書いておりました。
これをmain.cpp以外でやるためにSceneChange関数を作りたいです。

Justy

Re:シーンごとのソース管理

#6

投稿記事 by Justy » 15年前

>これを作りたいのですがどこにどう書けばよいのかが
 SceneChange関数は System.SceneNumの値を変更するだけでいいんじゃないでしょうか?
 その場合 GetSceneFunc内での System.SceneNumに対する書き込みは不要になります。

 どこに書くかは System.SceneNumにアクセスできるところならどこでもお好みで。
 本来 GetSceneFunc関数らを含めて独立したソースにあるのが望ましいですが、現状 main.cppにあるのなら
そこでも構わないでしょう。
 あとはプロトタイプ宣言を書いたヘッダを用意すればいいかと。

omusubi

Re:シーンごとのソース管理

#7

投稿記事 by omusubi » 15年前

なんどもすみません・・・。
回答ありがとう御座います。

また、なかった関数を付け足しました最新版です。
http://211.18.152.192:81/uploader/He/up ... ?377473378
pass:dx

現在main.cppからならSystem.SceneNumを弄りシーンチェンジが出来るのですが
~_sceneといった所ですと呼び出すことができません・・・。
※F2でシーンチェンジするようにしてあります。
 +1をしているだけなのでシーンがない場所にも読みに行っております。(危ないのはわかっております)

調べてみるとextern?というのを変数の先につけるとできると言うことまでわかりました。
しかしつけてみたのですがうまく動きません・・・。
また毎シーンでキー情報の取得などが呼ばれるのでシーンごとに定義しなくても
KEY Keyを呼び出せるようにしたいです・・・。

Justy

Re:シーンごとのソース管理

#8

投稿記事 by Justy » 15年前

>現在main.cppからならSystem.SceneNumを弄りシーンチェンジが出来るのですが
>~_sceneといった所ですと呼び出すことができません
 ?
 SceneChange関数を使ってシーンを変えるのではなく、各ソースから直接グローバル変数である
System.SceneNumを変えてシーンを変えたいのですか?

 あまりグローバル変数をあちこちで参照するのはお行儀がよくないので、
SceneChange関数を作り、その中で System.SceneNumを変えるようにしましょう。

 既に MyLib.hに SceneChange関数のプロトタイプ宣言があるので、あとは関数の実体さえあれば
あとは他のソースで MyLib.hをインクルードすれば、SceneChange関数を呼び出すことが
できるはずです。

 ついでに、SceneChange関数内で sceneFuncを書き換えるようにしましょう。
 そうすればあらためて GetSceneFuncを呼び出さなくて済みます。
 で、先にも書きましたが、GetSceneFuncでの sceneFuncの代入を止めます。

 最小限の書き換えをしてものを添付しました。
 見比べたり、他のソースから SceneChange関数を呼び出してみるなど試してみて下さい。


>シーンがない場所にも読みに行っております
 シーンがなくても問題なく動くようにしましょう。
 無効なシーンの場合は sceneFuncに NULLが入るようにして、

if(sceneFunc->init) sceneFunc->init();
 ではなく
if(sceneFunc && sceneFunc->init) sceneFunc->init();
 とすれば安全になります。


>シーンごとに定義しなくても
>KEY Keyを呼び出せるようにしたいです・・・。
 もうできるようになってますよ。
 MyLib.hに extern KEYがあるので、MyLib.hさえインクルードされていれば
各ソースで Key変数にアクセスできます。
 試してみて下さい。

おむすび

Re:シーンごとのソース管理

#9

投稿記事 by おむすび » 15年前

>>Justy様
いつも助けていただいてありがとうございます。

できました><
Keyが呼び出せなかった原因としてインクルードしてないモノがありました・・・。
本当にありがとうございました。

閉鎖

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