ページ 1 / 1
ボス戦終了後のイベント
Posted: 2012年12月17日(月) 15:31
by おかかぶし
こんにちは
私はいまsoftyaさんのRPG講座を元にC言語を学んでいます。
早速質問です。
ボス戦闘終了後に画像を表示させ、その画像にウィンドウボックスをつくりメッセージを出力させたいのですが、詰まってしまいました。
シナリオに直接画像をバックグラウンドで表示させるプログラムを書き、softyaさんのつくった{SCN_MES}でメッセージを出力させるのは可能なのでしょうか?
やり方を変えて画像を表示させるイベントを作ってみたのですが、そのイベントを継続したまま{SCN_MES}のイベントに移ることも出来ず、詰まってしまいました。
ボスバトルのイベントはsoftyaさんの作ったもののままです。
身近に質問できる方もいないので、教えていただけると幸いです。
どうぞよろしくお願いします。
画像を表示させるイベント
コード:
static int scn_Photo(ScnData_t *scnData)
{
int photo1;
SetDrawScreen(DX_SCREEN_BACK);
photo1 = LoadGraph( "data/photo/test.jpg" ) ;
DrawGraph( 0 , 0 , hey1 , FALSE ) ;
ScreenFlip();
WaitKey();
// シナリオを次に進める。
event_NextScn();
return EVENT_RTN_CONTINE;
}
シナリオ
コード:
static ScnData_t Boss1[] = {
{ SCN_MES, "コメント表示", TRUE, SCN_WND_MSGD },
// 戦闘開始
{ SCN_BOSS_BTL,NULL,ENEMY_BOSS }, //ボスバトル
{ SCN_PHOTO },
{ SCN_MES, "コメント表示", TRUE, SCN_WND_MSGD },
{ SCN_MES, "コメント表示", TRUE, SCN_WND_MSGD },
{ SCN_EXIT }, //イベントを抜ける
{ SCN_END }, //ストッパとしてシナリオ終端に必須です。
};
Re: ボス戦終了後のイベント
Posted: 2012年12月17日(月) 16:01
by softya(ソフト屋)
さきほどのぽちさんと同じ方でしょうか? もし同じ方なら名前を統一していただくといちいち細かい経験などを聞かなくて良くなるので統一をお願いします。
フォーラムルール上も統一をお願いしております。
http://dixq.net/board/board.html
さて、この問題は私がやっている次の点を破壊しているので出来ません。
ScreenFlip();などの3大処理はmainでしか行わないと言う点です。
「補足資料.11章 書いてはいけない4つの処理」
http://dixq.net/g/h_11.html
画像を表示したい場合は、event_Mainから画像の描画処理を呼び出すようにしてscn_Photoでは画像読み込みと画像ハンドルの変数保存だけを行うようにして下さい。
保存した画像ハンドルの変数は画像の描画に使用します。あと、この仕組みだと画像を消すコマンドも必要となります。
Re: ボス戦終了後のイベント
Posted: 2012年12月18日(火) 01:34
by おかかぶし
softyaさん返信ありがとうございます。
私は、ぽちさんとは別の者です。C言語は1年前から勉強している初心者です。
ちょうどRPG講座を参考にしていて質問していた方がいたので私も質問させていただきました。
混乱させてしまって申し訳ありません。
今修正してみましたがこれで合ってますか?
あと、event_Mainで描画処理を呼び起こすやり方がわかりません。
直接DrawGraphを入れるってことではないですよね?
イベントを描画する。のを参考にして描画処理をして描画処理を呼び出せば良いのでしょうか?
①event_Mainで描画処理を呼び起こすやり方
②描画処理の仕方(LoadGraphで保存した画像ハンドルを他の場所で呼び出す仕方)
を教えていただきたいです。
よろしくお願いします。
画像を表示させる
コード:
static int scn_Photo(ScnData_t *scnData)
{
int photo1;
photo1 = LoadGraph( "data/photo/test.jpg" ) ;
//シナリオを次に進める。
event_NextScn();
return EVENT_RTN_CONTINE;
}
画像を消去する
コード:
static int scn_Nophoto(ScnData_t *scnData)
{
InitGraph() ;
event_NextScn();
return EVENT_RTN_CONTINE;
}
Re: ボス戦終了後のイベント
Posted: 2012年12月18日(火) 03:42
by へにっくす
みけ さんが書きました:今修正してみましたがこれで合ってますか?
あと、event_Mainで描画処理を呼び起こすやり方がわかりません。
直接DrawGraphを入れるってことではないですよね?
イベントを描画する。のを参考にして描画処理をして描画処理を呼び出せば良いのでしょうか?
聞く前にやってください。
やってみて、それでも理解できなかったら、そのコードを掲示し質問してくださいね。
さて修正したけどこれで合ってる?とのことですが、
scn_Photoとscn_Nophotoはどのような使い方をしてるのでしょうか?
それを示して下さい。関数だけコードを表示しても意味がありません。
WinMain関数から呼び出すとこまで全部を示さないとアドバイスできません。
※今のままですと合ってるとは言えないが、どのようにして呼び出すつもりなのかが不明です。
LoadGraphで戻ってきたハンドルをどうするのかがみたいですね。
Re: ボス戦終了後のイベント
Posted: 2012年12月18日(火) 11:02
by softya(ソフト屋)
話の流れとペット系の名前が続いたので勘違いしてすいませんでした。
それと私はコードを把握しているの良いですが、確かに他の人辛いですね。
どのコードをベースに使っているかリンクをお願いします。
さて、今回の問題点ですが
(1) int photo1;はローカル変数なのでscn_Photo()関数を抜けると消えてしまいます。その為に用意してあるイベント(シナリオ)制御構造体にメンバ変数を追加して格納するように変更して下さい。event_Initで初期化を書く必要もあります。
(2)InitGraph() ;は読み込み済みの全ての画像を消すので通常は使いません。DeleteGraph()を使って下さい。あと読み込み済みである事を確認してから削除するようにしてくださいね。
>あと、event_Mainで描画処理を呼び起こすやり方がわかりません。
>直接DrawGraphを入れるってことではないですよね?
>イベントを描画する。のを参考にして描画処理をして描画処理を呼び出せば良いのでしょうか?
あっしまった。そういえば描画専用でevent_Drawがありますね。忘却の彼方でした。
このプログラム構造ならevent_Mainで描画してはいけません。この話は忘れてevent_Drawでイベントの画像を直接DrawGraphで描画して下さい。
Re: ボス戦終了後のイベント
Posted: 2013年1月03日(木) 15:42
by おかかぶし
だいぶ時間があいてしまって、申し訳ありません。
softyaさん、へにっくすさん返信有難う御座いました。
アドバイスを元に編集したところ、やっとできました。
リンクも貼らず説明が足りず分かりづらく申し訳ありませんでした。
今度質問する際にはリンクを貼らさせていただきたいと思います。
また詰まったときには、お世話になると思いますのでよろしくお願いします。