シューティングゲームの館での
シューティングゲームの館での
4.基本的な関数を作る。
のプログラムを自分のやりやすいように変えてやってみると
実行結果のようにはいかず
また、プログラムソースを丸写しでも実行結果と同じようになりませんでした。
やってみた結果はFPSだけが表示されあとは真っ暗なままでした。
解決法はあるでしょうか?
それとも私だけでしょうか?
のプログラムを自分のやりやすいように変えてやってみると
実行結果のようにはいかず
また、プログラムソースを丸写しでも実行結果と同じようになりませんでした。
やってみた結果はFPSだけが表示されあとは真っ暗なままでした。
解決法はあるでしょうか?
それとも私だけでしょうか?
Re:シューティングゲームの館での
コンパイラはBorlandでしょうか?
もしそうなら、
void img_sound_load()関数内でロードしているデータは
Debugフォルダに入れなければならないのを入れていないのではないでしょうか。
ゲームプログラミングの館の方ではうまくいきましたか?
もしそうなら、
void img_sound_load()関数内でロードしているデータは
Debugフォルダに入れなければならないのを入れていないのではないでしょうか。
ゲームプログラミングの館の方ではうまくいきましたか?
Re:シューティングゲームの館での
素材ファイルの位置がおかしかったようです。
VusualC++を使用していますがご指摘で気づきました。
簡単なミスで申し訳ないです。
ありがとうございます。
VusualC++を使用していますがご指摘で気づきました。
簡単なミスで申し訳ないです。
ありがとうございます。
Re:シューティングゲームの館での
続けて質問すみません。
使用はVusualC++です。
5節の分割コンパイルについてですが
同じように組んでいても
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
・
・
・
このほかにも(似たようなエラーを)60ぐらいのを吐き出します。
メンバに関してもちゃんと入っているのにこのようなエラーが出て
構文エラーに関しては間違っていないのにこのようなエラーがでます。
他のプログラムの本でも毎回分割コンパイルでつんでしまいます。
どなたか教えてください。
使用はVusualC++です。
5節の分割コンパイルについてですが
同じように組んでいても
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
・
・
・
このほかにも(似たようなエラーを)60ぐらいのを吐き出します。
メンバに関してもちゃんと入っているのにこのようなエラーが出て
構文エラーに関しては間違っていないのにこのようなエラーがでます。
他のプログラムの本でも毎回分割コンパイルでつんでしまいます。
どなたか教えてください。
Re:シューティングゲームの館での
簡単な分割コンパイルについてやってみましょう。
まず、ゲームプログラミングの館の5節で紹介しているコードを用います。
これです。
DXライブラリのサンプル実行用フォルダにあるプロジェクトでいいので、これをコピペしてください。
これを分けてみますね。
真ん中の部分を抜き取って、draw_graph()という関数
うまくいきました?
ちなみに、test.cppで書いている
extern void draw_graph();
はエクスターン宣言といって、違いファイルにある関数を違うファイルで呼ぶときに、
「どっかのファイルにこの関数がありますよ」と言うことを示すものです。
関数を呼ぶほうのファイルに書いてください。
まず、ゲームプログラミングの館の5節で紹介しているコードを用います。
これです。
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 int White,Red,G_Blue; White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得 G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得 DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画 DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画 DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし) DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし) WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
DXライブラリのサンプル実行用フォルダにあるプロジェクトでいいので、これをコピペしてください。
これを分けてみますね。
真ん中の部分を抜き取って、draw_graph()という関数
void draw_graph(){ int White,Red,G_Blue; White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得 G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得 DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画 DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画 DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし) DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし) } を作り、他のファイルに移してみましょう。 まず、ソリューションエクスプローラーの 「DxLib_VC2005用」上で右クリックし「追加」>「新しい項目」を選びます。 左側で[コード]が選択されていることを確認し、右側でc++を選択し、名前は適当にtest2とでもしましょう。 出てきたtest2.cppの画面に、先ほど作った関数を書いてみます。 DxLib.hのインクルードはDXライブラリの関数を使うファイルでは全て呼ぶ必要があるので、 test2.cppとtest.cppの記述は以下のようになります。 --------------------test2.cpp-------------------- #include "DxLib.h" void draw_graph(){ int White,Red,G_Blue; White = GetColor( 255 , 255 , 255 ) ; // 白色の値を取得 Red = GetColor( 255 , 0 , 0 ) ; // 赤色の値を取得 G_Blue = GetColor( 0 , 255 , 255 ) ; // 緑と青の混合色の値を取得 DrawLine ( 10 , 10 , 630 , 10 , White ) ; // 線を描画 DrawBox ( 10 , 50 , 310 , 100 , G_Blue , FALSE) ; // 四角形を描画 DrawBox ( 10 , 150 , 310 , 200 , G_Blue , TRUE ) ; // 四角形を描画(塗りつぶし) DrawCircle( 500 , 300 , 100 , Red , TRUE) ; // 円を描画(塗りつぶし) } --------------------------test.cpp----------------------------------- #include "DxLib.h" extern void draw_graph(); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 draw_graph(); WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } ---------------------------------------------------------------------
うまくいきました?
ちなみに、test.cppで書いている
extern void draw_graph();
はエクスターン宣言といって、違いファイルにある関数を違うファイルで呼ぶときに、
「どっかのファイルにこの関数がありますよ」と言うことを示すものです。
関数を呼ぶほうのファイルに書いてください。
Re:シューティングゲームの館での
なお、
5節では、たったこれだけしか書いていないので
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
のようなエラーが出るのはおかしいです。このような変数は使っていません。
きっと、プロジェクトではない、別のファイルか何かに書き込んでいるのではないでしょうか?
なお、DXライブラリのプロジェクトはコンソールのプロジェクトではないので、
5節はサンプルプログラム実行用フォルダにあるプロジェクトではコンパイル出来ません。
5節をコンパイルするときは、コンソール用のプロジェクトで行ってください。
6節からはDXライブラリ用のプロジェクトでコンパイル可能です。
5節では、たったこれだけしか書いていないので
/*test.cpp*/ #include <stdio.h> char a[30]="hello"; extern void disp(); void main(){ disp(); } /* test2.cpp */ #include <stdio.h> extern char a[30]; void disp(){ printf("%s",a); }
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
のようなエラーが出るのはおかしいです。このような変数は使っていません。
きっと、プロジェクトではない、別のファイルか何かに書き込んでいるのではないでしょうか?
なお、DXライブラリのプロジェクトはコンソールのプロジェクトではないので、
5節はサンプルプログラム実行用フォルダにあるプロジェクトではコンパイル出来ません。
5節をコンパイルするときは、コンソール用のプロジェクトで行ってください。
6節からはDXライブラリ用のプロジェクトでコンパイル可能です。
Re:シューティングゲームの館での
先ほどのサンプルプログラム試してきました。
どうやらうまくいったようです!
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
を書き込んだプログラムは5節ではなく6節のものでした。
となると何がおかしかったのでしょうか?
ライブラリ使用前の設定でしょうか・・・?
どうやらうまくいったようです!
error C2039: 'status' : 'CharaData' のメンバではありません。
error C2146: 構文エラー : ';' が、識別子 'status' の前に必要です。
を書き込んだプログラムは5節ではなく6節のものでした。
となると何がおかしかったのでしょうか?
ライブラリ使用前の設定でしょうか・・・?
Re:シューティングゲームの館での
うーん、そもそもCharaDataなんて変数は無いと思うのですが・・。
どこかに
CharaData.status
みたいな記述があるんですよね?
どこにCharaDataが書いてありますか?
Ctrl+FでCharaDataで検索すれば見つかります。
最悪の場合
ソースとプロジェクトのダウンロード
で完成したプロジェクトがダウンロードできますので、そちらご利用下さい。
どこかに
CharaData.status
みたいな記述があるんですよね?
どこにCharaDataが書いてありますか?
Ctrl+FでCharaDataで検索すれば見つかります。
最悪の場合
ソースとプロジェクトのダウンロード
で完成したプロジェクトがダウンロードできますので、そちらご利用下さい。
Re:シューティングゲームの館での
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} BODY_player_t;
extern BODY_player_t Player;
を
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} CharaData;
extern CharaData Player;
に変えています。
double x,y;
int status,counter;
int shot [11][15];
} BODY_player_t;
extern BODY_player_t Player;
を
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} CharaData;
extern CharaData Player;
に変えています。
Re:シューティングゲームの館での
しつこいようですみません。
先ほどの何も変えずにそのまま入れたら成功しました。
どういうことでしょうか?
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} BODY_player_t;
extern BODY_player_t Player;
の[BODY_player_t;]というのは[CharaData]に置き換えることはできないのでしょうか?
含めて[extern BODY_player_t Player;]というのを[CharaData Player;]に変えることがなぜできないのでしょうか?
先ほどの何も変えずにそのまま入れたら成功しました。
どういうことでしょうか?
typedef struct{
double x,y;
int status,counter;
int shot [11][15];
} BODY_player_t;
extern BODY_player_t Player;
の[BODY_player_t;]というのは[CharaData]に置き換えることはできないのでしょうか?
含めて[extern BODY_player_t Player;]というのを[CharaData Player;]に変えることがなぜできないのでしょうか?
Re:シューティングゲームの館での
2つ上の投稿の内容がただしければそれは出来ます。
名前が変わっただけなので。
しかし[extern BODY_player_t Player;]というのを[CharaData Player;]という変更は出来ません。
先ほども書きましたとおり、extern宣言というのは、同一ファイル内で宣言していないものを他のファイルで使用するとき「どっかのファイルに定義があるから探してね」という意味なので、
定義するファイルでは
CharaData Player;
と書きますが、それを利用するほかのファイルでは
extern CharaData Player;
と書かなければいけません。
名前を変えることは出来ます。CharaDataという名前でもかまいません。
名前が変わっただけなので。
しかし[extern BODY_player_t Player;]というのを[CharaData Player;]という変更は出来ません。
先ほども書きましたとおり、extern宣言というのは、同一ファイル内で宣言していないものを他のファイルで使用するとき「どっかのファイルに定義があるから探してね」という意味なので、
定義するファイルでは
CharaData Player;
と書きますが、それを利用するほかのファイルでは
extern CharaData Player;
と書かなければいけません。
名前を変えることは出来ます。CharaDataという名前でもかまいません。
Re:シューティングゲームの館での
また、タグの名前は、他の変数名と混合しないよう、後ろに_tをつけるのが一般的なようです。
別に義務ではないですが、パッとみてすぐタグ名だとわかるので、_tをつけるのがおススメです。
別に義務ではないですが、パッとみてすぐタグ名だとわかるので、_tをつけるのがおススメです。
Re:シューティングゲームの館での
なるほど。こんな質問に時間をかけてしまいすみませんでした。
また何かあったら質問させていただきますがそのときは
よろしくお願いします。
本当にありがとうございました!
また何かあったら質問させていただきますがそのときは
よろしくお願いします。
本当にありがとうございました!