rpgで家に入る
Re: rpgで家に入る
フィールドの書き方にもよりますが、
配列でマップを作っているならば入口用の番号を振ってみてはいかがでしょうか?
二つ目の質問の回答はマップをスクロールするのではなくキャラクターをスクロール(キャラクターに関してはスクロールとは言わない?)します。
配列でマップを作っているならば入口用の番号を振ってみてはいかがでしょうか?
二つ目の質問の回答はマップをスクロールするのではなくキャラクターをスクロール(キャラクターに関してはスクロールとは言わない?)します。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
>家に入るプログラムをどうやってプログラムを組めばいいかわかりません。
家の入り口でマップイベントで家のマップへジャンプします。
マップイベントは言うなれば歩くときに衝突する見えない地形です。
どこまで汎用的にするかは設計の問題ですが、シナリオの新たな展開が巻き起こることも考えてイベント系のシステムは作ったほうが良いです。
シナリオは通常スクリプトを使います。※Luaでも可。
【補足】
シナリオを呼び出すイベントとマップ切り替えだけのイベント。
> 家の中は狭いので、スクロールじゃなくて、普通に歩き回れるようにしたいです。
マップスクロール止めればよいだけです。マップのサイズで判定してはどうでしょうか?
難しいと言われたので読んでないと思いますが、一応説明してあります。
「マイ 日記 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&sd=a&c=2&start=40
家の入り口でマップイベントで家のマップへジャンプします。
マップイベントは言うなれば歩くときに衝突する見えない地形です。
どこまで汎用的にするかは設計の問題ですが、シナリオの新たな展開が巻き起こることも考えてイベント系のシステムは作ったほうが良いです。
シナリオは通常スクリプトを使います。※Luaでも可。
【補足】
シナリオを呼び出すイベントとマップ切り替えだけのイベント。
> 家の中は狭いので、スクロールじゃなくて、普通に歩き回れるようにしたいです。
マップスクロール止めればよいだけです。マップのサイズで判定してはどうでしょうか?
難しいと言われたので読んでないと思いますが、一応説明してあります。
「マイ 日記 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&sd=a&c=2&start=40
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: rpgで家に入る
ホヅミさんsoftyaさん 回答ありがとうございます
つまり入口用の見えない画像を作ってその画像と当たり判定をして、
当たったら部屋の中に移動すということですね?
あと部屋の画像とフィールドの画像の切り替えはどのようにしたらいいですか?
普通にswitch関数などを使うのですか?
つまり入口用の見えない画像を作ってその画像と当たり判定をして、
当たったら部屋の中に移動すということですね?
あと部屋の画像とフィールドの画像の切り替えはどのようにしたらいいですか?
普通にswitch関数などを使うのですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
ちゃんと作るならイベントレイヤを用意して下さい。heyman さんが書きました:ホヅミさんsoftyaさん 回答ありがとうございます
つまり入口用の見えない画像を作ってその画像と当たり判定をして、
当たったら部屋の中に移動すということですね?
その場合は画像は不要です。
ちゃんと作るならロードから設計しないといけません。heyman さんが書きました: あと部屋の画像とフィールドの画像の切り替えはどのようにしたらいいですか?
普通にswitch関数などを使うのですか?
画像ハンドルを取り替えて(前のマップ画像は破棄、新しいマップ画像をロード)、今どのマップに居るか意識しなくても画像が切り替わるように作ります。
とりあえずのプロトタイプなら、switch文で良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: rpgで家に入る
ロードというのは、現在のマップ => 現在のマップの画像の削除 => 新しいマップの読み込み => 新しいマップの描画softya(ソフト屋) さんが書きました:ちゃんと作るならロードから設計しないといけません。
画像ハンドルを取り替えて(前のマップ画像は破棄、新しいマップ画像をロード)、今どのマップに居るか意識しなくても画像が切り替わるように作ります。
という事ですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
マップロードは、マップ画像やマップの全レイヤデータ(現在配列定義されていもの)、マップに結びついたNPCキャラ画像、ENEMYキャラ画像、マップ固有のシナリオなどなどの読み込みです。
現在のマップ => フェードアウト => 現在のマップデータの破棄 => 新しいマップの読み込み => 新しいマップに関連した初期化 => フェードイン/描画開始 => 主人公の移動可能。
と言ったRPG特有の流れです。この他にシナリオが絡んだります。
現在のマップ => フェードアウト => 現在のマップデータの破棄 => 新しいマップの読み込み => 新しいマップに関連した初期化 => フェードイン/描画開始 => 主人公の移動可能。
と言ったRPG特有の流れです。この他にシナリオが絡んだります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: rpgで家に入る
オフトピック
>あと部屋の画像とフィールドの画像の切り替えはどのようにしたらいいですか?
>普通にswitch関数などを使うのですか?
何かをしたい→さぁどうすればいいのですか? といきなり質問するよりも
まず自分で思った方法でやってみてはどうでしょう.
switchでいけそうだと思う&他の方法が思いつかない ならとりあえずswitchで実装してみる
→その結果,「実現できなかった」とかこの方法だと「○○という面で良くない」
→じゃあどうすればよくなるか? (質問するのは少なくともこの段階)
…というように話を進めていく感じ,というか.
(あるいは,最低限,
switchしか思いつかないけど「それだと実装するまでもなく○○という面で良くない:いけそうではない」
→じゃあどうすればよくなるか? (質問するのは少なくともこの段階)
みたいな話.)
「」の中身が無いと,自分の創作活動なのに他人のいいなりの作業になってしまいそう,とか思ったり…
>普通にswitch関数などを使うのですか?
何かをしたい→さぁどうすればいいのですか? といきなり質問するよりも
まず自分で思った方法でやってみてはどうでしょう.
switchでいけそうだと思う&他の方法が思いつかない ならとりあえずswitchで実装してみる
→その結果,「実現できなかった」とかこの方法だと「○○という面で良くない」
→じゃあどうすればよくなるか? (質問するのは少なくともこの段階)
…というように話を進めていく感じ,というか.
(あるいは,最低限,
switchしか思いつかないけど「それだと実装するまでもなく○○という面で良くない:いけそうではない」
→じゃあどうすればよくなるか? (質問するのは少なくともこの段階)
みたいな話.)
「」の中身が無いと,自分の創作活動なのに他人のいいなりの作業になってしまいそう,とか思ったり…
Re: rpgで家に入る
マップロードの関数を使った具体的な流れは、
現在のマップデーター
maphandle[] マップチップを入れとく配列
map[][] マップチップの配置
mapi[][] マップ上のイベント
あたらしいマップデータ
newmaphandle[] 新しいマップチップを入れとく配列
newmap[][] 新しいマップチップの配置
newmapi[][] 新しいマップ上のイベント
でするときどういう流れになりますか?
現在のマップデーター
maphandle[] マップチップを入れとく配列
map[][] マップチップの配置
mapi[][] マップ上のイベント
あたらしいマップデータ
newmaphandle[] 新しいマップチップを入れとく配列
newmap[][] 新しいマップチップの配置
newmapi[][] 新しいマップ上のイベント
でするときどういう流れになりますか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
いまのに上書きするので、newの名前のついた変数はいらないです。
※ 同時存在する必要が無いため。
※ 同時存在する必要が無いため。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: rpgで家に入る
maphandle[] マップチップを入れとく配列
map[][] マップチップの配置
mapi[][] マップ上のイベント
を使いまわすということですか?
たとえば、maphandle[]のもともとはいってた画像を消して新しい画像を入れる
他のも、map[][]の中身やmapi[][]の中身も新しいマップのデーターに置き換えるということですか?
map[][] マップチップの配置
mapi[][] マップ上のイベント
を使いまわすということですか?
たとえば、maphandle[]のもともとはいってた画像を消して新しい画像を入れる
他のも、map[][]の中身やmapi[][]の中身も新しいマップのデーターに置き換えるということですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
そうですね。試してもらったほうが早いと思います。
早くても半年以上制作にかかるRPGですので、ここでじっくりチャレンジして知識を増やしてもらった方が良さそうです。
細かく書くと色々とワナがありますが、失敗しないと覚えませんので。
【補足】
必要なヒントは既に提示してあります。
やった上で問題が出て分からなければ、また聞いて下さい。
早くても半年以上制作にかかるRPGですので、ここでじっくりチャレンジして知識を増やしてもらった方が良さそうです。
細かく書くと色々とワナがありますが、失敗しないと覚えませんので。
【補足】
必要なヒントは既に提示してあります。
やった上で問題が出て分からなければ、また聞いて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: rpgで家に入る
さっそくつまずいてしまってきました。
家とフィールドの往復はできたのですが、
マップ移動の際、前のマップ座標が残ってしまい、
中途半端な場所から始まってしまいます。
どうしたらよいでしょうか?
自機の移動処理を乗せておきます
家とフィールドの往復はできたのですが、
マップ移動の際、前のマップ座標が残ってしまい、
中途半端な場所から始まってしまいます。
どうしたらよいでしょうか?
自機の移動処理を乗せておきます
int key;
key=CheckHitKeyAll();
pl.movex=pl.mx;
pl.movey=pl.my;
mp.mscrx=mp.scrx;
mp.mscry=mp.scry;
pl.mwalkx=3;
pl.mwalky=3;
if(CheckHitKey(KEY_INPUT_UP)==1)pl.mwalky=0, pl.yflag=1;//上に移動
if(CheckHitKey(KEY_INPUT_DOWN)==1)pl.mwalky=1, pl.yflag=1;//下に移動
if(CheckHitKey(KEY_INPUT_LEFT)==1)pl.mwalkx=0, pl.xflag=1;//左に移動
if(CheckHitKey(KEY_INPUT_RIGHT)==1)pl.mwalkx=1, pl.xflag=1;//右に移動
if( key != 0)
{
if(pl.yflag==1)
{
if(pl.mwalky==0)pl.movey-=pl.sp,mp.mscry += pl.sp ;//上に移動
if(pl.mwalky==1)pl.movey+=pl.sp,mp.mscry -= pl.sp ;//下に移動
pl.yflag=0;
}
if(pl.xflag==1)
{
if(pl.mwalkx==0)pl.movex-=pl.sp,mp.mscrx += pl.sp ;//左に移動
if(pl.mwalkx==1)pl.movex+=pl.sp,mp.mscrx -= pl.sp ;//右に移動
pl.xflag=0;
}
}
if(pl.mflag==0 && mapc[(pl.movey)/32][(pl.movex)/32]==0 && mapc[(pl.movey+32-1)/32][(pl.movex)/32]==0
&& mapc[(pl.movey+32-1)/32][(pl.movex+25-1)/32]==0 && mapc[(pl.movey)/32][(pl.movex+25-1)/32]==0
&& ataru==0)
{
mp.scrx=mp.mscrx;
mp.scry=mp.mscry;
pl.mx=pl.movex; //x座標の更新
pl.my=pl.movey; //y座標の更新
}
pl.vx=pl.mx+mp.scrx;
pl.vy=pl.my+mp.scry;
pl.mcount++;
if(pl.mwalky==1)
{
pl.img=8+(pl.mcount%24)/6;
}
if(pl.mwalky==0)
{
pl.img=(pl.mcount%24)/6;
}
if(pl.mwalkx==1)
{
pl.img=4+(pl.mcount%24)/6;
}
if(pl.mwalkx==0)
{
pl.img=12+(pl.mcount%24)/6;
}
//DrawGraph(t1.tx+mp.scrx,t1.ty+mp.scry,t1.thandle[1],TRUE);
DrawGraph(pl.vx,pl.vy,pl.handle[pl.img],TRUE);
return 0;
}
Re: rpgで家に入る
↑に書いた質問ですが、
分かりにくいと思ったので、
簡単に書きます。
pl.mx,pl.myは、マップ全体から見た座標です。
mp.scrx,mp.scryは、スクロールさせるための変数です。
pl.vx,pl.vyは、画面上での自機の座標です。
pl.vx,pl.vyの求め方は、それぞれ
pl.vx=pl.mx+mp.scrx;
pl.vy=pl.my+mp.scry;
です。別マップに移動したときに、スタートする座標をそのマップ内のイベント配列内で設定して、
それをもとに計算して、スタート座標を決めたいのですが
うまくいきません。どうすればいいでしょうか?
分かりにくいと思ったので、
簡単に書きます。
pl.mx,pl.myは、マップ全体から見た座標です。
mp.scrx,mp.scryは、スクロールさせるための変数です。
pl.vx,pl.vyは、画面上での自機の座標です。
pl.vx,pl.vyの求め方は、それぞれ
pl.vx=pl.mx+mp.scrx;
pl.vy=pl.my+mp.scry;
です。別マップに移動したときに、スタートする座標をそのマップ内のイベント配列内で設定して、
それをもとに計算して、スタート座標を決めたいのですが
うまくいきません。どうすればいいでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
> うまくいきません。どうすればいいでしょうか?
どう、うまく行かなのでしょうか? 曖昧な部分は排除して数値などで説明して下さい。
どう、うまく行かなのでしょうか? 曖昧な部分は排除して数値などで説明して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: rpgで家に入る
指摘ありがとうござますsoftya(ソフト屋) さんが書きました:> うまくいきません。どうすればいいでしょうか?
どう、うまく行かなのでしょうか? 曖昧な部分は排除して数値などで説明して下さい。
いい座標の計算の方法がわかないです。
もしかして、新しいマップに入ったら、自機の座標も
一回リセットした方がいいんでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: rpgで家に入る
自機は出現先のマップ座標にしないと矛盾します。
mp.scrx;などはマップに合わせて再設定します。そんなに難しい計算ではないので考えてみてください。
mp.scrx;などはマップに合わせて再設定します。そんなに難しい計算ではないので考えてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。