ページ 11

シューティング、会話での画像描写

Posted: 2010年12月15日(水) 10:01
by F

コード:

 	前略	

            strcpy_s(story[num].type,10,token[0]);
		
		strcpy_s(story[num].name,50,token[1]);

		strcpy_s(story[num].story,256,token[2]);
		num++;
	}

	story[num].story[0]='\0';

	FileRead_close(fp);
}

void talk_disp()
{
	static int num;
	static int len;

	char buf[256];

	strcpy_s(buf,256,story[num].story);

	if(CheckStatePad(configpad.shot)==1){
		if(buf[len]=='\0')
		{
			len = 0;
			++num;
		}
	}

	if(CheckStatePad(configpad.bom)%5 == 4){
		len = 0;
		++num;
	}

	if(buf[0]=='\0'){
		num=0;
		len=0;
		func_state= 30;

		return;
	}

	for (int i=0; i<2&& buf[len] != '\0'; ++i){
		switch(buf[len]){
			case'\0':
				break;

		default:
            ++len;
            break;
        }
    }

    buf[len] = '\0';


    // 背景を暗く
    SetDrawBlendMode(DX_BLENDMODE_ALPHA , 80);
    DrawBox(FIELD_X , FIELD_Y , FIELD_X+FIELD_MAX_X , FIELD_Y+FIELD_MAX_Y , color[1] , TRUE);
    DrawBox(FIELD_X , 410 , FIELD_Y+FIELD_MAX_X , FIELD_Y+FIELD_MAX_Y , color[0] , TRUE);
    SetDrawBlendMode(DX_BLENDMODE_NOBLEND , 0);

	//画像
	if (story[num].type==0)
	DrawGraph(  FIELD_X, FIELD_MAX_Y-116 ,img_board[1],FALSE);
	if (story[num].type==1)
	DrawGraph(  FIELD_X + 152, FIELD_MAX_Y-116 ,img_board[2],FALSE);
 後略
 
龍神プログラム支館でのサウンドノベルにキャラ画像の挿入を試みたのですが、うまくいきません。
表情差分はカットしたので、キャラ判断をして画像が表示されればよいのですがどうすればいいでしょうか?

Re: シューティング、会話での画像描写

Posted: 2010年12月15日(水) 12:21
by kimuchi
サウスさんのものをそのまま使っていれば、story[num].typeはint型だったと思うので
strcpy_s(story[num].type,10,token[0]);
ではなく、
story[num].type = atoi(token[0]);
ではないでしょうか? 

また、仮にstory[num].typeをchar型の配列で扱っていたとすると、
if (story[num].type==0)、if (story[num].type==1)
の判定式はおかしいです。

Re: シューティング、会話での画像描写

Posted: 2010年12月16日(木) 09:24
by F
strcpy_s(story[num].type,10,token[0]);の部分は自分なりの改悪だったんで修正します。

画像切り替えはif以外に何かあるでしょうか?

Re: シューティング、会話での画像描写

Posted: 2010年12月16日(木) 11:07
by kimuchi
画像切り替え、というより条件分岐なら他にswitchなどがありますが、、、
分岐自体はifで良いと思いますよ。

一応これでキャラの判別表示はできていると思うのですが、
まだ問題がありますか?
推論ですが、片方表示されているときにもう片方が消える、ということが問題なのでしょうか?
できれば修正コードの貼り付けもお願いします。

Re: シューティング、会話での画像描写

Posted: 2010年12月17日(金) 00:53
by F
if (story[num].type==0)、if (story[num].type==1)
でやるとエラーなので、まだ画像すら出てきてないですね。

Re: シューティング、会話での画像描写

Posted: 2010年12月17日(金) 09:53
by kimuchi
そうでしたか、早とちり申し訳ないですorz

では、
エラーに書いてある内容は分かりますか?
あとstory[num].typeは配列ですか?

Re: シューティング、会話での画像描写

Posted: 2010年12月18日(土) 15:39
by F
story[num].type = atoi(token[0]);の場合はエラーはなしでした。

となるとやはりif文の仕方が違うのでしょうか?

Re: シューティング、会話での画像描写

Posted: 2010年12月18日(土) 19:15
by kimuchi
質問にお答え頂けると助かるのですが(^^;)
とくにエラー内容が分かればこちらも対応しやすいので。

おそらくFさんの仰る通り、if文の所でエラーになっていると思います。

Re: シューティング、会話での画像描写

Posted: 2010年12月18日(土) 20:26
by F
いえエラーなしです ただ反応せずに普通に会話が進みます

Re: シューティング、会話での画像描写

Posted: 2010年12月18日(土) 21:48
by kimuchi
ということは、
story[num].type = atoi(token[0]);
でも画像が表示されないということですか?

だとすれば怪しいのは
ファイル読み込みの段階でtoken[0]の値がおかしい、ぐらいしか思いつきません(汗)
printfDx("%d\n",story[num].type)などで、if文に突入する直前のstory[num].typeの値を調べていただけますか?

Re: シューティング、会話での画像描写

Posted: 2010年12月18日(土) 23:43
by F
初心者なのでそういわれてもよくわかりません

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 00:03
by kimuchi
printfDx("%d\n",story[num].type);
if (story[num].type==0)
DrawGraph( FIELD_X, FIELD_MAX_Y-116 ,img_board[1],FALSE);
if (story[num].type==1)
DrawGraph( FIELD_X + 152, FIELD_MAX_Y-116 ,img_board[2],FALSE);

上のように書き換えて実行してみて下さい。
多分実行途中にばーっと文字が現れると思うのでそれを教えて下さい。

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 00:04
by パコネコ
実は龍神プログラム支館をまだ読んだことないので内容を理解できてませんが、
kimuchiさんの言ってることはおそらく、

コード:

printfDx("%d\n",story[num].type);//追加
    //画像
    if (story[num].type==0)
    DrawGraph(  FIELD_X, FIELD_MAX_Y-116 ,img_board[1],FALSE);
    if (story[num].type==1)
    DrawGraph(  FIELD_X + 152, FIELD_MAX_Y-116 ,img_board[2],FALSE);
みたいな感じでstory[num].typeを使う前に追加して動かしてみてください。
という意味だと思います。
===
初心者と言いつつ私よりプログラムできそう・・・
===
すいません
いないと思ったので勝手に補足説明しようとしました・・・

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 00:16
by F
プログラムしたところ エクセルで打ち込んだ画像番号が画面左に縦一列で表示されました。
読み込みは出来ているということでいいでしょうか?

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 00:22
by kimuchi
どうやらそのようですね。
では次に

コード:

if (story[num].type==0){
     DrawGraph( FIELD_X, FIELD_MAX_Y-116 ,img_board[1],FALSE);
     printfDx("0");
}
if (story[num].type==1){
     DrawGraph( FIELD_X + 152, FIELD_MAX_Y-116 ,img_board[2],FALSE);
     printfDx("1");
}
このように書き変えて実行してみてください。
これで0やら1やらが表示されればとりあえずif文には問題ないと思います。

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 00:54
by F
表示されたのでif文には問題なさそうです。
とすればloadでimgbordで画像を読み込ませたのが問題でしょうか?

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 08:00
by kimuchi
すみません返信遅れましたorz

自分も配列でLoadGraph使っているのでそれは問題ないと思います。

ただちょっと気になっているのはimgbordが[1]から始まっていることですが・・・
imgbordの宣言文とそのloadでimgbordで画像を読み込ませている文を載せていただけますか?

追記:
返信がおそらく19時以降になります。度々すみません。

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 18:03
by F
GLOBAL int img_board[40]; の
img_board[1] = LoadGraph("../G1A223/img/talk/player");
img_board[2] = LoadGraph("../G1A223/img/talk/boss");
です

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 18:55
by kimuchi
原因が分かりました。
"../G1A223/img/talk/player"も"../G1A223/img/talk/boss"
ファイルのパスに拡張子が抜けています。

もしかしたら分からないかもしれませんので説明を。
まず、コントロールパネルを開いて「フォルダオプション」を開いてください。
次に、「表示」タブをクリックして、「登録されている拡張子は表示しない」のチェックを外して下さい。
そうしたら表示したい画像ファイルの入っているフォルダに行ってみてください。
多分「player.bmp」のように後ろに変なのが付いていると思います。それも含めてファイルパスを
"../G1A223/img/talk/player.bmp"
のように変えてみてください。

Re: シューティング、会話での画像描写

Posted: 2010年12月19日(日) 19:18
by F
どうやらそのせいですね
初歩的すぎてものすごく恥ずかしいです
今まで応えていただきありがとうございました