館8章において
Re: 館8章において
龍神録プログラミングの館の8章に「ch.img+=4*2;」という記述は見当たらないのですが、
9章の間違いもしくは別のサイトですか?
9章の間違いもしくは別のサイトですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 館8章において
龍神録プログラミングの館9章の話であると仮定すると、
「ch.img+=4*2;」という書き方だけでは「画像を左向きに」という意味はありません。
calc_ch関数内でch.imgが0~3のいずれかに設定され、
img_ch[0][8~11]にたまたま左向きの画像を示すハンドルが格納されているので、
結果的にgraph_ch関数で描画される画像が左向きのものになります。
「ch.img+=4*2;」という書き方だけでは「画像を左向きに」という意味はありません。
calc_ch関数内でch.imgが0~3のいずれかに設定され、
img_ch[0][8~11]にたまたま左向きの画像を示すハンドルが格納されているので、
結果的にgraph_ch関数で描画される画像が左向きのものになります。
オフトピック
これを書くために龍神録プログラミングの館で配布されているソースコードを見て思ったのですが、
・なぜgraph_ch()が他の自機系の関数があるchar.cppにまとまっていないのか。
・ch_move()はcalc_ch()と独立させるべきではないのではないか。
この実装だと、ch_move()とcalc_ch()を呼ぶ順番を逆にするとこの「ch.img+=4*2;」という処理が効かなくなってしまう。
例えば、calc_ch関数からmove_ch関数とanim_ch関数を呼び出す実装にする方がいいかもしれない。
・ch_move()とcalc_ch()でchの位置が違うのも気になる。
まあ、龍神録(略)館の設計はあまり良くないというのは前から言われていますし、
もちろん今更修正する必要もないですが…。
・なぜgraph_ch()が他の自機系の関数があるchar.cppにまとまっていないのか。
・ch_move()はcalc_ch()と独立させるべきではないのではないか。
この実装だと、ch_move()とcalc_ch()を呼ぶ順番を逆にするとこの「ch.img+=4*2;」という処理が効かなくなってしまう。
例えば、calc_ch関数からmove_ch関数とanim_ch関数を呼び出す実装にする方がいいかもしれない。
・ch_move()とcalc_ch()でchの位置が違うのも気になる。
まあ、龍神録(略)館の設計はあまり良くないというのは前から言われていますし、
もちろん今更修正する必要もないですが…。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
この理解のためには、そもそもch.imgのメンバ変数imgの役割が理解できていないといけません。
どの程度理解されていますか?
どの程度理解されていますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
そこを理解しないといけないのですよね。値が0のときと9の時だと何が違うのでしょうか?yusha さんが書きました:どう言ったらいいのかわかりませんが、画像制御のやつだと思ってます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
どちらかと言うとゲームプログラミングの館の方をちゃんと先に学習された方が良い気がします。
http://dixq.net/g/
こっちが入門編なので、龍神録は応用編となりますから。
まぁ逆に龍神録より高度な部分もあります。
http://dixq.net/g/
こっちが入門編なので、龍神録は応用編となりますから。
まぁ逆に龍神録より高度な部分もあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
これですね。
「4.1 画像を分割してロードする」
http://dixq.net/g/04_01.html
あと旧館の
「22. キャラを4方向に歩かせる。」
http://dixq.net/g/24.html
「4.1 画像を分割してロードする」
http://dixq.net/g/04_01.html
あと旧館の
「22. キャラを4方向に歩かせる。」
http://dixq.net/g/24.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館8章において
見てみたのですが、今回の件に関しては結局よくわかりませんでした。キーが押されている間は代入された数字の画像ハンドルのものを描写してるということなのでしょうか??
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
> 見てみたのですが、今回の件に関しては結局よくわかりませんでした。キーが押されている間は代入された数字の画像ハンドルのものを描写してるということなのでしょうか??
「代入された数字の画像ハンドルのものを描写してる」の部分が分かっているのか分かっていないのか少々不安です。
1.ch.imgは配列の添字として使われているのは分かりますか?
2.そして配列には何がどんな順番で格納されているでしょうか?
> そこを理解しないといけないのですよね。値が0のときと9の時だと何が違うのでしょうか?
の部分を分かってもらいたいのですが、そこは分かったのですか?
龍神録を含めDXライブラリだとLoadDivGraphに利用は重要ポイントなのですが。
「代入された数字の画像ハンドルのものを描写してる」の部分が分かっているのか分かっていないのか少々不安です。
1.ch.imgは配列の添字として使われているのは分かりますか?
2.そして配列には何がどんな順番で格納されているでしょうか?
> そこを理解しないといけないのですよね。値が0のときと9の時だと何が違うのでしょうか?
の部分を分かってもらいたいのですが、そこは分かったのですか?
龍神録を含めDXライブラリだとLoadDivGraphに利用は重要ポイントなのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館8章において
>「代入された数字の画像ハンドルのものを描写してる」の部分が分かっているのか分かっていないのか少々不安です。
1.ch.imgは配列の添字として使われているのは分かりますか?
2.そして配列には何がどんな順番で格納されているでしょうか?
1.わかってると思います。
2.「0.png」の各画像が左上を0として右に順に格納されていると思ってます。
>そこを理解しないといけないのですよね。値が0のときと9の時だと何が違うのでしょうか?
よくわかりません。
1.ch.imgは配列の添字として使われているのは分かりますか?
2.そして配列には何がどんな順番で格納されているでしょうか?
1.わかってると思います。
2.「0.png」の各画像が左上を0として右に順に格納されていると思ってます。
>そこを理解しないといけないのですよね。値が0のときと9の時だと何が違うのでしょうか?
よくわかりません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
じゃあ、確認します。
1.0.pngの画像ですが実際に画像ビューアなどでどう並んでいるか確認されていますか?
2.LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;の 4 , 3の意図を想像してみて書いてください。
3.1.2.を答えた上で改めて聞きますが、0や9の数値の意味は何でしょうか?
よく分からない場合は、別プログラムを作って img_ch[0]が保持する全画像を表示するプログラムを作成してみてください。
※ 色々と私が書いているのは理解するためのアプローチ方法を提示しています。つまり本当に理解するために必要で他の場面でも使える汎用的な方法です。
1.0.pngの画像ですが実際に画像ビューアなどでどう並んでいるか確認されていますか?
2.LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;の 4 , 3の意図を想像してみて書いてください。
3.1.2.を答えた上で改めて聞きますが、0や9の数値の意味は何でしょうか?
よく分からない場合は、別プログラムを作って img_ch[0]が保持する全画像を表示するプログラムを作成してみてください。
※ 色々と私が書いているのは理解するためのアプローチ方法を提示しています。つまり本当に理解するために必要で他の場面でも使える汎用的な方法です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 館8章において
1.確認しました。縦×横=3×4で表示されていました。
2.移動している向きに応じての横列が3段あるということでしょうか?
3.作成したのですがよくわかりません。
2.移動している向きに応じての横列が3段あるということでしょうか?
3.作成したのですがよくわかりません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
2.そうです。向きに応じて3段ありますね。じゃあ、4列は何のためにあるか理解されていますか?
3.ゲームプログラミングの館のアレンジで出来ませんか? 何がどう分からないか、もう少し具体的にお願いします。
アレンジを作れないというのは、根本的に理解出ていないと言うことで、龍神録の理解も困難だと言うことですよ。
3.ゲームプログラミングの館のアレンジで出来ませんか? 何がどう分からないか、もう少し具体的にお願いします。
アレンジを作れないというのは、根本的に理解出ていないと言うことで、龍神録の理解も困難だと言うことですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館8章において
2.マントの変化ぐらいしか見受けられません。
3.画像をすべて表示することろまではできました。ですが、「ch.img+=」に続けて0や9、その他の数字を代入しても実行結果の変化は見られてもどうしてそのようになるのか理解できません。それこそ0を代入したときには向きの変化はなく移動するし、9を代入したときには向きを変化して移動はするもののキャラが点滅してるし・・・。
3.画像をすべて表示することろまではできました。ですが、「ch.img+=」に続けて0や9、その他の数字を代入しても実行結果の変化は見られてもどうしてそのようになるのか理解できません。それこそ0を代入したときには向きの変化はなく移動するし、9を代入したときには向きを変化して移動はするもののキャラが点滅してるし・・・。
Re: 館8章において
9を代入したときは、起こるべきではないことが起こっています。yusha さんが書きました:9を代入したときには向きを変化して移動はするもののキャラが点滅してるし・・・。
それは何でしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
9を代入したときに点滅するソースコードを提示してくださいね。そのほうが話が早いです。
3.画像をすべて表示することろまではできました。のソースコードも見せて欲しいです。
>画像を制御しきれてない(?)から点滅してるということですか?
よく分かっていない部分がある証拠ですね。
3.画像をすべて表示することろまではできました。のソースコードも見せて欲しいです。
>画像を制御しきれてない(?)から点滅してるということですか?
よく分かっていない部分がある証拠ですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館8章において
基盤の数値を9に変更しただけですが。
#include "DxLib.h"
void calc_ch(){
ch.cnt++;
ch.img = (ch.cnt % 24) / 6;
}
void ch_move(){
int i, sayu_flag, joge_flag = 0;
double x, y, mx, my, naname = 1;
double move_x[4] = { -4.0, 4.0, 0, 0 }, move_y[4] = { 0, 0, 4.0, -4.0 };
int inputpad[4];
inputpad[0] = CheckStatePad(configpad.left); inputpad[1] = CheckStatePad(configpad.right);
inputpad[2] = CheckStatePad(configpad.down); inputpad[3] = CheckStatePad(configpad.up);
if (CheckStatePad(configpad.left)>0)
ch.img += 9;
else if (CheckStatePad(configpad.right)>0)
ch.img += 4 * 1;
for (i = 0; i<2; i++)
if (inputpad[i]>0)
sayu_flag = 1;
for (i = 2; i<4; i++)
if (inputpad[i]>0)
joge_flag = 1;
if (sayu_flag == 1 && joge_flag == 1)
naname = sqrt(2.0);
for (int i = 0; i<4; i++){
if (inputpad[i]>0){
x = ch.x, y = ch.y;
mx = move_x[i]; my = move_y[i];
if (CheckStatePad(configpad.slow)>0){
mx = move_x[i] / 3; my = move_y[i] / 3;
}
x += mx / naname, y += my / naname;
if (!(x<10 || x>FIELD_MAX_X - 10 || y<5 || y>FIELD_MAX_Y - 5)){
ch.x = x, ch.y = y;
}
}
}
}
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
int Image[12];
LoadDivGraph("../dat/img/char/0.png", 12, 4, 4, 32, 32, Image);
while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()){
DrawGraph(0, 0, Image[0], TRUE);
DrawGraph(50, 0, Image[1], TRUE);
DrawGraph(100, 0, Image[2], TRUE);
DrawGraph(150, 0, Image[3], TRUE);
DrawGraph(0, 50, Image[4], TRUE);
DrawGraph(50, 50, Image[5], TRUE);
DrawGraph(100, 50, Image[6], TRUE);
DrawGraph(150, 50, Image[7], TRUE);
DrawGraph(0, 100, Image[8], TRUE);
DrawGraph(50, 100, Image[9], TRUE);
DrawGraph(100, 100, Image[10], TRUE);
DrawGraph(150, 100, Image[11], TRUE);
DrawGraph(0, 150, Image[12], TRUE);
DrawGraph(50, 150, Image[13], TRUE);
}
DxLib_End();
return 0;
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
1番めのプログラムでは、
>それこそ0を代入したときには向きの変化はなく移動するし、9を代入したときには向きを変化して移動はするもののキャラが点滅してるし・・・。
代入と書いてますが、ch.img += 9;は加算代入ですよね。加算代入とただの代入は全然違います。プログラミングにおいては言葉は正確に使いましょう。
ch.img += 9;とした場合、ch.img の値は幾つになるか想像できていますでしょうか? 書いてみてくださいね。
2番めのプログラムは、色々とマズイですね。
配列がnt Image[12];でLoadDivGraph("../dat/img/char/0.png", 12, 4, 4, 32, 32, Image);ですから、どちらも12個の要素を示しています。
配列の添字は0から始まりますので12個なら11が最大値です。
なので、
DrawGraph(0, 150, Image[12], TRUE);
DrawGraph(50, 150, Image[13], TRUE);
この2つはエラーメッセージが出てないにしても論理的にエラー=バグです。
>それこそ0を代入したときには向きの変化はなく移動するし、9を代入したときには向きを変化して移動はするもののキャラが点滅してるし・・・。
代入と書いてますが、ch.img += 9;は加算代入ですよね。加算代入とただの代入は全然違います。プログラミングにおいては言葉は正確に使いましょう。
ch.img += 9;とした場合、ch.img の値は幾つになるか想像できていますでしょうか? 書いてみてくださいね。
2番めのプログラムは、色々とマズイですね。
配列がnt Image[12];でLoadDivGraph("../dat/img/char/0.png", 12, 4, 4, 32, 32, Image);ですから、どちらも12個の要素を示しています。
配列の添字は0から始まりますので12個なら11が最大値です。
なので、
DrawGraph(0, 150, Image[12], TRUE);
DrawGraph(50, 150, Image[13], TRUE);
この2つはエラーメッセージが出てないにしても論理的にエラー=バグです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
それも含めて考えないといけませんね。yusha さんが書きました:1.「ch.img」は(ch.cnt % 24) / 6の値ということですか??
謝ることはないですが、配列がちゃんと理解できていないのでは?と言う疑問です。yusha さんが書きました: 2.すいません。これは素でミスりました。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
それだと値は何になりますか? そんなに多くないので全部書き出せるはずです。yusha さんが書きました:1.すいません。書き方をミスった気がします。実際言いたかったのは(ch.cnt % 24) / 6に9を加算した数値と考えています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
> 9→10→11→12→9→10→11→12・・・という数をループしています。
そうですね。であれば12だと表示はどうなりますか?
そうですね。であれば12だと表示はどうなりますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
そうですね。点滅する結果と一致しますね。yusha さんが書きました:12であれば、画像ファイルに本来あるはずのないものを読み込もうとした結果何もないので描写することはできず、結果そのフレームの間は何も表示されません。
つまり、そういうバグを作った訳です。
私の書いたのは9の値ならどうなりますか?って書いたので、それを9の加算に変えたのはyushaさんですよね。
これでアレンジしようと思っても、よく分かっていないとバグを簡単に入れ込めることが分かると思います。
さて、最初の質問に立ち返って見て下さい。「ch.img+=4*2;」は理解は出来たでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
どちらが論理的な意味で分かりやすいと思いますか?
ただ8の場合と4*2で何が違うのでしょう?
ただ8の場合と4*2で何が違うのでしょう?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館8章において
ソースコード内にいきなり8と書かれていたら「なんだこの8は?」となりますよね。
4*2とあると「なるほど、横に4つの画像があって上から2番目の行をループするんだな」とわかりやすいからだと思います。
4*2とあると「なるほど、横に4つの画像があって上から2番目の行をループするんだな」とわかりやすいからだと思います。
初心者です
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
分かりやすればバグが減りますね。つまり自分の為になります。yusha さんが書きました:4*2の方がわかりやすいかもしれません。
他の人に見せるコードなら当然考慮すべき事になります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
0にしてみれば分かります。
それとnaname を詳細に解説できるなら0を初期値にしなかった理由が分かっているはずです。
つまり、naname が何かわかっていないのだと思います。
それとnaname を詳細に解説できるなら0を初期値にしなかった理由が分かっているはずです。
つまり、naname が何かわかっていないのだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館8章において
この質問は8章ですので、9章のnaname は別トピックでお願いします。
少なくともベクトルと三角関数の理解は必要です。ゲームプログラミングの館にあるので読んでおいて下さいね。
まぁ、三角関数を知らなくても図を描いて定規で測れば感覚的に分かるんですけどね。
※ ちょと忙しいのしばらくで返事はできません。
少なくともベクトルと三角関数の理解は必要です。ゲームプログラミングの館にあるので読んでおいて下さいね。
まぁ、三角関数を知らなくても図を描いて定規で測れば感覚的に分かるんですけどね。
※ ちょと忙しいのしばらくで返事はできません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。