画像の表示の仕方が分かりません
画像の表示の仕方が分かりません
DXライブラリを使っているのですが画像の表示の順番を選択することって出来ないですかね?
具体的にはy座標が小さい順に表示したいのですがどうすればいいのか分かりません
教えてくださいお願いします
具体的にはy座標が小さい順に表示したいのですがどうすればいいのか分かりません
教えてくださいお願いします
Re: 画像の表示の仕方が分かりません
質問がやや漠然としているのでアレですが
描画する順番を変えたいという意味ならば
プログラムは基本的に上から処理されていくという決まりがあることを理解すれば大丈夫です
つまり上にかかれた描画関数から先に処理されていき、先に描画された画像の上に後に書かれた画像が乗ってしまう場合は
そのまま上に描画された画像のみが表示されます
y座標が小さいモノを「先に」描画させたいのならその描画処理を前の方で
y座標が小さいモノを「上に」描画させたい(他の画像の前に描画させるの意)のならその描画処理を後の方に
それぞれ書けばいいと思います。
時間差で描画させたいという意味だったなら
静的変数を宣言して、それが一定の値になった時のみ描画させるようにすればいいと思います。
描画する順番を変えたいという意味ならば
プログラムは基本的に上から処理されていくという決まりがあることを理解すれば大丈夫です
つまり上にかかれた描画関数から先に処理されていき、先に描画された画像の上に後に書かれた画像が乗ってしまう場合は
そのまま上に描画された画像のみが表示されます
y座標が小さいモノを「先に」描画させたいのならその描画処理を前の方で
y座標が小さいモノを「上に」描画させたい(他の画像の前に描画させるの意)のならその描画処理を後の方に
それぞれ書けばいいと思います。
時間差で描画させたいという意味だったなら
静的変数を宣言して、それが一定の値になった時のみ描画させるようにすればいいと思います。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ
Re: 画像の表示の仕方が分かりません
すいません 質問に具体性が足りませんでした
私が想像しているのは常に画像の表示順が変わって欲しいわけです
キャラクターが障害物の後ろに移動すれば当然、キャラクターが先に描画されますし
逆に障害物の前にキャラクターが移動すれば障害物が先に描画されていることになりますよね
そういうことがしたいのです
わざわざ回答していただいたのにすいません
できれば常に画像の描画順が入れ替わる風にするには
どうすればいいかご教授いただけないでしょうか?
私が想像しているのは常に画像の表示順が変わって欲しいわけです
キャラクターが障害物の後ろに移動すれば当然、キャラクターが先に描画されますし
逆に障害物の前にキャラクターが移動すれば障害物が先に描画されていることになりますよね
そういうことがしたいのです
わざわざ回答していただいたのにすいません
できれば常に画像の描画順が入れ替わる風にするには
どうすればいいかご教授いただけないでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
最近似たような回答をしました。
http://dixq.net/forum/viewtopic.php?f=3&t=8221
奥行きをCZで表現してますがyが奥行きならyを奥行きに置き換えてください。
http://dixq.net/forum/viewtopic.php?f=3&t=8221
奥行きをCZで表現してますがyが奥行きならyを奥行きに置き換えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
次の説明でわからない番号を書いてください。
①奥行き値がyならyの大きなものから描画すれば描画順番が正しくなることは理解できますか?
②yの大きなものから並べるのにソートを使います。
③キャラと障害物を識別番号で区別して指定された識別番号のものを指定座標に描画する関数は作れますか?
④xとy座標と識別番号を構造体に入れて複数の描画物分配列化して、その構造体配列をy座標順にソートして描画関数を呼ぶ処理を作れますか?
①奥行き値がyならyの大きなものから描画すれば描画順番が正しくなることは理解できますか?
②yの大きなものから並べるのにソートを使います。
③キャラと障害物を識別番号で区別して指定された識別番号のものを指定座標に描画する関数は作れますか?
④xとy座標と識別番号を構造体に入れて複数の描画物分配列化して、その構造体配列をy座標順にソートして描画関数を呼ぶ処理を作れますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
③と④は置いておいて、ソートをまず勉強しましょう。
ソートはアルゴリズムの基本とも言うべきものでゲームで非常に重要です。
「C言語講座>アルゴリズム研究室>ソート」
http://www1.cts.ne.jp/~clab/algorithm/sort.html
「アルゴリズムとデータ構造編 トップページ」
http://www.geocities.jp/ky_webid/algorithm/index.html
とりあえずバブルソートが必要です。最低これは理解して下さい。
他のアルゴリズムもゲームで使うことがあるので時間を見ては勉強することをお勧めします。
下記の描画構造体配列データをyが大から小の順番になるようにソートしてprintfしてみてください。
ソートはアルゴリズムの基本とも言うべきものでゲームで非常に重要です。
「C言語講座>アルゴリズム研究室>ソート」
http://www1.cts.ne.jp/~clab/algorithm/sort.html
「アルゴリズムとデータ構造編 トップページ」
http://www.geocities.jp/ky_webid/algorithm/index.html
とりあえずバブルソートが必要です。最低これは理解して下さい。
他のアルゴリズムもゲームで使うことがあるので時間を見ては勉強することをお勧めします。
下記の描画構造体配列データをyが大から小の順番になるようにソートしてprintfしてみてください。
// 描画構造体。
typdef struct {
int x; //X座標
int y; //Y座標
int ImageID; //描画物の識別ID
} DrawData_t;
// 描画構造体配列。
DrawData_t DrawData[] = {
{ 0,1, 2},
{ 0,9, 3},
{ 0,7, 5},
{ 0,10, 4},
{ 0,3, 1},
{ 0,2, 0},
};
③に関して障害物や自キャラ敵キャラが混じっても1つの関数で描画できるよう出来ますか?すいません
③に関してはDXライブラリを使用すれば分かります
④とソートの意味が分かりません
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 画像の表示の仕方が分かりません
ゲームループの中で何度もソートを繰り返すという考えでいいでしょうか?
>③に関して障害物や自キャラ敵キャラが混じっても1つの関数で描画できるよう出来ますか?
描画関数のDrawGraphを一回だけ使って3つの画像を表示する方法は存じません
自作関数を作ってその中に収めるということならできますが・・・
>③に関して障害物や自キャラ敵キャラが混じっても1つの関数で描画できるよう出来ますか?
描画関数のDrawGraphを一回だけ使って3つの画像を表示する方法は存じません
自作関数を作ってその中に収めるということならできますが・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
ゲームループ中で毎フレーム必ずソートしないと順番は制御できません。gazo さんが書きました:ゲームループの中で何度もソートを繰り返すという考えでいいでしょうか?
はい。自作関数で描画してください。gazo さんが書きました: >③に関して障害物や自キャラ敵キャラが混じっても1つの関数で描画できるよう出来ますか?
描画関数のDrawGraphを一回だけ使って3つの画像を表示する方法は存じません
自作関数を作ってその中に収めるということならできますが・・・
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
難しく考えすぎているように思います。
softyaさんは非常に簡単なことを解りやすく教えて下さっているので、是非「難しそう」と思うこと無く考えてみてください。
問題が難しい時や複雑な時、要素が多くて考えにくい時は、問題を分解したり、簡略化したり、要素を減らしてまず考えることが多いです。
構造体のソートが難しいならまず配列で、6つの要素が多すぎるならまず3つで考えたりしてみてください。
例えば
int a[3];
a[0] = 5;
a[1] = 1;
a[2] = 2;
があった時、
for( int i=0; i<3; i++ ){
printf("%d\n", a);
}
で小さい順に表示するようにしなさいと言われたら出来ますか?
a[0] = ?;
a[1] = ?;
a[2] = ?;
出来たら次はと、分からない数値が入っても小さい順に並び替えて表示できるようにして下さい。
出来たら次は要素を3つから4つにしてみて下さい。
出来たら次は要素を6つにしてみて下さい。(この辺からソートのプログラムを理解しないと手におえなくなってくるはずです)
出来たら次は構造体にして、softyaさんが出された問題を解いてみてください。
恐らく順番にやっていけばいきなり解くよりわかりやすくなるのではないかと思います。
softyaさんは非常に簡単なことを解りやすく教えて下さっているので、是非「難しそう」と思うこと無く考えてみてください。
問題が難しい時や複雑な時、要素が多くて考えにくい時は、問題を分解したり、簡略化したり、要素を減らしてまず考えることが多いです。
構造体のソートが難しいならまず配列で、6つの要素が多すぎるならまず3つで考えたりしてみてください。
例えば
int a[3];
a[0] = 5;
a[1] = 1;
a[2] = 2;
があった時、
for( int i=0; i<3; i++ ){
printf("%d\n", a);
}
で小さい順に表示するようにしなさいと言われたら出来ますか?
a[0] = ?;
a[1] = ?;
a[2] = ?;
出来たら次はと、分からない数値が入っても小さい順に並び替えて表示できるようにして下さい。
出来たら次は要素を3つから4つにしてみて下さい。
出来たら次は要素を6つにしてみて下さい。(この辺からソートのプログラムを理解しないと手におえなくなってくるはずです)
出来たら次は構造体にして、softyaさんが出された問題を解いてみてください。
恐らく順番にやっていけばいきなり解くよりわかりやすくなるのではないかと思います。
Re: 画像の表示の仕方が分かりません
int main()
{
int i, j, flag;
DrawData_t temp;
for(int k=0;k<3;k++){
j = 0;
do {
flag = 0;
for(i=0;i<3-j;i++) {
if( *( (int *)&DrawData [i] + k) > *((int *)&DrawData[i+1] + k)) {
temp = DrawData[i];
DrawData[i] = DrawData[i+1];
DrawData[i+1] = temp;
flag = 1;
}
}
j++;
}while(flag);
}
return 0;
}
うーん?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
このコード自体は構造体を扱っているとしたら、わざわざポインタを出して難しくしていると言うか意味不明になっています。
ポインタが出てくる余地は有りませんので無しで書けます。
とりあえず、この件は置いておいてDixq (管理人)さん言われるとおりint配列をソートするプログラムを作ってみてください。
結果のprintfもお忘れなく。
これをクリアできたら、構造体配列に移りましょう。
ポインタが出てくる余地は有りませんので無しで書けます。
とりあえず、この件は置いておいてDixq (管理人)さん言われるとおりint配列をソートするプログラムを作ってみてください。
結果のprintfもお忘れなく。
これをクリアできたら、構造体配列に移りましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 画像の表示の仕方が分かりません
はい、言われたとおり簡単なソートからはじめて見ます
最後に2つほど質問なのですが
・関数をソートすることってできるのですか?
わたしが参考サイトをまわっていた時は構造体や配列のソートばかりで関数のソートはありませんでした
・私はゲームをつくるときに主人公の画像ならsyujinkou関数で敵の画像ならteki関数で
フィールドの画像ならfi-rudo関数で描画処理を行っていたのですが
ソートをするならgazoukanri関数をつくってそこで全ての描画処理をする方がいいのでしょうか?
お教えください
最後に2つほど質問なのですが
・関数をソートすることってできるのですか?
わたしが参考サイトをまわっていた時は構造体や配列のソートばかりで関数のソートはありませんでした
・私はゲームをつくるときに主人公の画像ならsyujinkou関数で敵の画像ならteki関数で
フィールドの画像ならfi-rudo関数で描画処理を行っていたのですが
ソートをするならgazoukanri関数をつくってそこで全ての描画処理をする方がいいのでしょうか?
お教えください
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 画像の表示の仕方が分かりません
構造体に描画関数ポインタを追加してy座標共々ソートさせる方法はあります。gazo さんが書きました: ・関数をソートすることってできるのですか?
わたしが参考サイトをまわっていた時は構造体や配列のソートばかりで関数のソートはありませんでした
上に書いた方法でも良いですし、描画はgazoukanri()で切り分けても良いです。gazo さんが書きました: ・私はゲームをつくるときに主人公の画像ならsyujinkou関数で敵の画像ならteki関数で
フィールドの画像ならfi-rudo関数で描画処理を行っていたのですが
ソートをするならgazoukanri関数をつくってそこで全ての描画処理をする方がいいのでしょうか?
ご自分の知識レベルで可能な方を選択されると良いんじゃないでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。