ページ 11

竜神録 第5章について

Posted: 2013年7月27日(土) 23:12
by mepotaso
第5章の最後に、変数の定義部とextern宣言を「main.cpp」「graph.cpp」「load.cpp」から消すと書いてありましたが、extern宣言とは「extern int ~ ;」 までの部分を全部消して、変数の定義部というのは「int ~ ;」までの部分を消せばいいのですか?教えてください。

Re: 竜神録 第5章について

Posted: 2013年7月27日(土) 23:30
by Dixq (管理人)
そうです。その通りにしてうまくいきませんでしたか?

返信ありがとうございます

Posted: 2013年7月27日(土) 23:37
by mepotaso
ミスがあるかもと思い2,3回試してみたのですが、やはりうまくできません。どうしてでしょうか

Re: 竜神録 第5章について

Posted: 2013年7月27日(土) 23:38
by みけCAT
多分記述が間違っているからでしょう。
コード全体を貼っていただけますか?
もしくはPerlかなんかで変換スクリプトを書いていただくか。

Re: 竜神録 第5章について

Posted: 2013年7月27日(土) 23:46
by mepotaso
main

#define GLOBAL_INSTANCE
#include "../include/GV.h"


//データのロード
extern void load();

//描画メイン
extern void graph_main();

int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ

//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

load();//データロード

while(ProcessLoop()==0){//メインループ

graph_main();//描画メイン

if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}

DxLib_End();//DXライブラリ終了処理
return 0;
}

load

#include "../include/GV.h"



void load(){
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}

graph

#include "../include/GV.h"

extern ch_t ch;


void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}

void graph_main(){
graph_ch();
}

コードってこれのことですか?初心者なのでextern void のところなども消していいか分かっていません。そこのところも教えてください。お願いします。

Re: 竜神録 第5章について

Posted: 2013年7月27日(土) 23:48
by みけCAT
GV.hを見せてください。
コードはcodeタグで囲んでいただけるとありがたいです。
エラーメッセージ、もしくはコンパイルが通る場合は想定する挙動と実際の挙動も貼っていただけるとありがたいです。

Re: 竜神録 第5章について

Posted: 2013年7月27日(土) 23:52
by mepotaso

コード:

#include "../../../include/DxLib.h"
#include "define.h"

#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern 
#endif

#include "function.h"           //関数宣言

//画像用変数宣言部
GLOBAL int img_ch[2][12];       //キャラクタ画像9枚分 X2(変身用)

//構造体変数宣言部
GLOBAL ch_t ch;                 //キャラクタデータ宣言

これでいいんですかね?分かりにくくてすいません。

Re: 竜神録 第5章について

Posted: 2013年7月28日(日) 00:12
by みけCAT
mainファイル内でGLOBAL_INSTANCEを定義したあとにincludeしたGV.hで定義されたch_t ch;と、
mainファイルで定義されたch_t ch;がかぶっています。
int img_ch[2][12];も同様です。

各ファイルの以下の行を消してください。
●mainファイル内
int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ

●loadファイル内(消すべき行はありません)

●graphファイル内
extern ch_t ch;

extern voidのところは(意味を厳密に特定できないので多分ですが)externを消してfunction.hに書けば、
mainファイルからは消していいと思います。

Re: 竜神録 第5章について

Posted: 2013年7月28日(日) 06:43
by mepotaso
返信遅れてすいません。みけCAT様の通りに消したら無事動きました。詳しい説明をありがとうございました!